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); }