private void EmailList_SelectedIndexChanged(object sender, EventArgs e) { long emailUID = Convert.ToInt64(EmailList.SelectedItem); var eml = imap.GetMessageByUID(emailUID); IMail email = new MailBuilder().CreateFromEml(eml); Subject.Text = email.Subject.ToString(); Sender.Text = email.Sender.ToString(); Body.Text = email.GetTextFromHtml().ToString(); }
public async Task <IActionResult> GetBankTransactions(string accountNumber = null) { List <string> vs = new List <string>(); BankAccount bankAccount = await FindBankAccount(accountNumber); GoogleAuth googleAuth = await GetGoogleAuth(bankAccount?.AlertEmail, bankAccount?.AccountNumber); List <BankTransaction> bankTransactions = new List <BankTransaction>(); //long? largestUID = googleAuth.LargestUID; try { using (Imap imap = new Imap()) { GoogleApi api = new GoogleApi(googleAuth?.AccessToken); string user = api.GetEmail(); imap.ConnectSSL("imap.gmail.com"); // or ConnectSSL for SSL imap.LoginOAUTH2(user, googleAuth?.AccessToken); FolderStatus status = imap.SelectInbox(); imap.SelectInbox(); //while (true) //{ //Uncomment the line below for instant push email notification //FolderStatus currentStatus = imap.Idle(); List <long> uids; if (googleAuth.LargestUID == 0 || googleAuth.UIDValidity != status.UIDValidity) { //get emails in the last one month uids = imap.Search().Where( Expression.And( Expression.From("*****@*****.**"), Expression.SentSince(DateTime.Now.AddMonths(-1))) ); } else { uids = imap.Search().Where( Expression.And( Expression.From("*****@*****.**"), Expression.UID(Range.From(googleAuth.LargestUID)) )); uids.Remove(googleAuth.LargestUID); } //List<MessageInfo> infos = imap.GetMessageInfoByUID(uids); //int counter = 0; foreach (long uid in uids) { //counter++; MessageInfo info = imap.GetMessageInfoByUID(uid); //var if (info.Envelope.Subject.Contains("Transaction Alert [Credit", StringComparison.OrdinalIgnoreCase)) { continue; } var eml = imap.GetMessageByUID(uid); IMail email = new MailBuilder().CreateFromEml(eml); //List<long> uids = imap.Search(Expression.From("gtbank.com")); //for (int i = 1; i < 20; i++) //{ //IMail email = new MailBuilder() // .CreateFromEml(imap.GetMessageByUID(uids[uids.Count - i])); if (email.Subject.Contains("Transaction Alert [Debit", StringComparison.OrdinalIgnoreCase) || (email.GetBodyAsText().Contains("eLectronic Notification Service", StringComparison.OrdinalIgnoreCase) && email.GetBodyAsText().Contains("Debit transaction", StringComparison.OrdinalIgnoreCase)) //&& email.GetBodyAsText().Contains($"{bankRegistered.AccountNo}") ) { Dictionary <string, string> transactionDetails = new Dictionary <string, string>(); string emailAsText = email.GetBodyAsText(); string emailAsTextTwo = email.GetTextFromHtml(); string emailAsTextThree = email.Text; if (emailAsText.Length < 10) { continue; } transactionDetails = ExtractText(emailAsText); if (transactionDetails["Account Number"] != accountNumber) { continue; } BankTransaction transaction = new BankTransaction { //transaction.AccountNo = transactionDetails["AccountNo"]; Subject = email.Subject }; if (email.Subject.Contains("Debit", StringComparison.OrdinalIgnoreCase) || email.GetBodyAsText().Contains("Debit", StringComparison.OrdinalIgnoreCase)) { transaction.TransactionType = "Debit"; } if (email.Subject.Contains("Credit", StringComparison.OrdinalIgnoreCase) || email.GetBodyAsText().Contains("Credit", StringComparison.OrdinalIgnoreCase)) { transaction.TransactionType = "Credit"; } transaction.Description = transactionDetails["Description"]; transaction.TransactionAmount = Convert.ToDecimal(transactionDetails["Amount"]); transaction.Remarks = transactionDetails["Remarks"]; transaction.AccountNumber = transactionDetails["Account Number"]; //You can try to format the datetime to a britain english culture, IFormatProvider transaction.TransactionDate = Convert.ToDateTime(transactionDetails["Date"] + " " + transactionDetails["Time"]); bool IsExists = await VerifyTransaction(transaction.AccountNumber, transaction.TransactionDate, transaction.TransactionType, transaction.TransactionAmount); if (IsExists) { continue; } //appuser Id is set in the Save transaction Method await SaveTransaction(transaction); bankTransactions.Add(transaction); } } UpdateLargestUID(uids[(uids.Count) - 1], googleAuth, status.UIDValidity); //} imap.Close(); } } catch (ImapResponseException ex) { Debug.WriteLine(ex.Message); _logger.LogError(ex.StackTrace); googleAuth.AccessToken = await RefreshAccessToken(googleAuth.RefreshToken); UpdateGoogleOAuth(googleAuth); await GetBankTransactions(accountNumber); } catch (Exception ex) { Debug.WriteLine(ex.Message); //log exception _logger.LogError(ex.StackTrace); } return(RedirectToAction("Index", "BankTransaction", new { accountId = bankAccount.BankAccountId })); }