private void ReadMessages_Load(object sender, EventArgs e) { UserEmailLabel.Text = LoginForm.UserNameValue + " Mail List:"; using (Pop3 pop3 = new Pop3()) { pop3.Connect("pop.gmail.com", 995, true); pop3.UseBestLogin("recent:" + LoginForm.LoginValue, LoginForm.PasswordValue); List <string> UidList = pop3.GetAll(); foreach (string uid in UidList) { IMail email = new MailBuilder().CreateFromEml(pop3.GetMessageByUID(uid)); MailListBox.Items.Add(email.From); MailListBox.Items.Add(email.GetBodyAsText()); MailListBox.Items.Add(" "); } pop3.Close(); } }
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 })); }
void update_emails(int v) { string sFrom, sSubject, sBody, sAddr; long c = 0; IMail mail; bool m_error = false; MessageInfo mi; lvemails.Sorting = SortOrder.None; lvcs.Order = SortOrder.None; lvcs.SortColumn = 0; sbText.Text = "Checking new emails..."; foreach (long i in mail_ids) { if (!updating_emails) { break; } c++; if (id_exists(i)) { continue; } mi = imapclient.GetMessageInfoByUID(i); if (((long)mi.Envelope.Size) > 2000000) { sbText.Text = "Skipped: (" + mi.Envelope.From[0].Address + ", " + ((long)mi.Envelope.Size / 1048576.0f).ToString("0.00") + " mb), " + c.ToString() + " of " + mail_ids.Count.ToString(); continue; } sbText.Text = "Opening message: (" + mi.Envelope.From[0].Address + ", " + mi.Envelope.Size.ToString() + " bytes), " + c.ToString() + " of " + mail_ids.Count.ToString(); try { mail = new MailBuilder().CreateFromEml(imapclient.GetMessageByUID(i)); } catch (Limilabs.Client.IMAP.ImapResponseException ire) { updating_emails = false; sbText.Text = "Failed to open message: " + ire.Message; return; } sFrom = mail.From[0].Name; sAddr = mail.From[0].Address; sSubject = mail.Subject.Replace("\"", "^"); sBody = mail.GetBodyAsText().Replace("\"", "^"); ListViewItem li = lvemails.Items.Add(i.ToString("00000")); li.Tag = i; li.SubItems.Add(sAddr); li.SubItems.Add(sSubject); if (sBody.Length > 15) { li.SubItems.Add(sBody.Substring(0, 14) + "..."); } else { li.SubItems.Add(sBody); } li.SubItems.Add("NEW"); sbText.Text = "Adding " + sAddr + "..."; runcommand("insert into emails(uid,sfrom,emailaddress,subject,body,processed) values(" + i.ToString() + "," + Program.enq(sFrom) + "," + Program.enq(sAddr) + "," + Program.enq(sSubject) + "," + Program.enq(sBody) + ",false)"); m_error = false; foreach (MimeData md in mail.Attachments) { if (!Path.GetExtension(md.SafeFileName).ToUpper().Equals(".TXT")) { string sp = check_file(Path.Combine(Program.rootfolder, @"REPLIES", md.SafeFileName)); runcommand("insert into files values(" + i.ToString() + "," + Program.enq(Path.GetFileName(sp)) + ")"); try { sbText.Text = "Saving " + sFrom + " file: " + sp + "..."; md.Save(sp); } catch (Limilabs.Client.ServerException e) { sbText.Text = "Can't save file: " + e.Message; m_error = true; } } } if (!m_error) { foreach (MimeData md2 in mail.Visuals) { if (!Path.GetExtension(md2.SafeFileName).ToUpper().Equals(".TXT")) { string sp2 = check_file(Path.Combine(Program.rootfolder, @"REPLIES", md2.SafeFileName)); runcommand("insert into files values(" + i.ToString() + ",\"" + Path.GetFileName(sp2) + "\")"); try { sbText.Text = "Saving " + sFrom + " file: " + sp2 + "..."; md2.Save(sp2); } catch (Limilabs.Client.ServerException e) { sbText.Text = "Can't save: " + e.Message; m_error = true; } } } } if (m_error) { Program.emaildbCmd.CommandText = "delete * from emails where uid = " + i.ToString(); Program.emaildbCmd.ExecuteNonQuery(); Program.emaildbCmd.CommandText = "delete * from files where uid = " + i.ToString(); Program.emaildbCmd.ExecuteNonQuery(); li.SubItems[1].Text = "Can't open"; } } updating_emails = false; if (lvemails.Items.Count > 0) { lvemails.Items[lvemails.Items.Count - 1].Selected = true; lvemails.Items[lvemails.Items.Count - 1].EnsureVisible(); } mailcount.Text = "Mails: " + lvemails.Items.Count.ToString(); if (!m_error) { sbText.Text = "Done."; } }