void MarkMessageAsProcessed(IList <Payment> saved, IList <MessageInfo> messages)
        {
            if (messages.Count == 0)
            {
                return;
            }
            var index = new HashSet <string>(saved.Select(o => o.TransactionId));

            using (var imap = CreateImapConnection(_cfg)) {
                imap.Inbox.Open(FolderAccess.ReadWrite);

                foreach (var msg in messages)
                {
                    var uniqueId = new UniqueId(msg.MessageId);
                    // Payment has been processed and saved successfully
                    // Mark as success
                    if (index.Contains(msg.TransactionId))
                    {
                        ImapTransactionParser.MarkMessage(imap.Inbox, uniqueId, true);
                    }
                    // There was a problem somewhere
                    // Mark as failure
                    else
                    {
                        log.Warn("Marking message {0} and transaction {1} as failed", msg.MessageId, msg.TransactionId);
                        ImapTransactionParser.MarkMessage(imap.Inbox, uniqueId, false);
                    }
                }
            }
        }
        /// <summary>
        /// Parse transaction IDs from email notifications sent
        /// by PayPal
        /// </summary>
        IList <MessageInfo> ParseTransactionsFromImap()
        {
            log.Info("Connecting to IMAP account <{0}>...", _cfg.Gmail.Username);

            IList <MessageInfo> list = new List <MessageInfo>();

            using (var imap = CreateImapConnection(_cfg)) {
                var parser = new ImapTransactionParser(imap, _cfg.TransactionParser.FilterCodes);
                list = parser.ParseTransaction();

                log.Debug("Successfuly parsed {0} transaction ids.", list.Count);
            }

            return(list);
        }