private bool IsExist(string UID) { try { MailInboxModel pmibmodel = new MailInboxModel(); pmibmodel.ID = null; pmibmodel.MessageHeader = null; pmibmodel.MessageBody = null; pmibmodel.MessageUID = UID; pmibmodel.Read = null; pmibmodel.receiveDate = null; pmibmodel.receiveTime = null; pmibmodel.SenderMail = null; MailInboxDO mibdo = new MailInboxDO(); List <MailInboxModel> mibmodel = new List <MailInboxModel>(); mibmodel = mibdo.Search(pmibmodel); if (mibmodel.Count != 0) { return(true); } else { return(false); } } catch (Exception ex) { return(false); } }
public List <messageBody> ReceiveMails() { int count = 0; MailInboxDO miDo = new MailInboxDO(); MailInboxModel messageModel = new MailInboxModel(); connectAndRetrieveButton.Enabled = false; uidlButton.Enabled = false; progressBar.Value = 0; int success = 0; try { if (pop3Client.Connected) { pop3Client.Disconnect(); } pop3Client.Connect(MailServer, 110, false); pop3Client.Authenticate(EmailUsername, EmailPassword); count = pop3Client.GetMessageCount(); int fail = 0; List <MessageUID> listcountUid = new List <MessageUID>(); List <string> lmsUid = pop3Client.GetMessageUids(); //اگر ایمیل دریافتی از قبل خوانده نشده بود و Delivery //نبود وارد لیست ایمیل ها نشود for (int i = lmsUid.Count - 1; i >= 0; i--) { if (!IsExist(lmsUid[i])) { Message msg = pop3Client.GetMessage(i + 1); if (msg.Headers.From.Address != "*****@*****.**" && !Ifmorethan9(msg)) { // pop3Client.GetMessageHeaders(i).Sender.Address != "*****@*****.**") MessageUID messageUid = new MessageUID(); messageUid.Index = i + 1; messageUid.UID = lmsUid[i]; listcountUid.Add(messageUid); } else { try { MailInboxModel messageModel1 = new MailInboxModel(); messageModel.MessageHeader = msg.Headers.Subject; messageModel.MessageBody = ""; messageModel1.MessageUID = lmsUid[i]; messageModel1.receiveDate = msg.Headers.DateSent.ToShortDateString(); messageModel1.receiveTime = msg.Headers.DateSent.ToShortTimeString(); messageModel1.SenderMail = msg.Headers.From.Address; messageModel1.Read = false; miDo.Insert(messageModel1, true); } catch (Exception ex) { LogRegister("ReceiveMails_DatabaseInsert", ex.Message); } } } } foreach (MessageUID msgUID in listcountUid) { if (IsDisposed) { return(null); } Application.DoEvents(); try { string msUid = pop3Client.GetMessageUid(msgUID.Index); Message message = pop3Client.GetMessage(msgUID.Index); if (!messages.ContainsKey(msgUID.Index)) { messages.Add(msgUID.Index, message); } MessagePart msgpart = message.FindFirstPlainTextVersion(); short trans; string AcountNumber; string[] messageBody; if (msgpart != null) { messageBody = msgpart.GetBodyAsText().Split(':'); } else { messageBody = new string[1]; } try { AcountNumber = messageBody[0]; trans = short.Parse(messageBody[1].Trim()); //اگر این شماره حساب در این روز کمتر از 10 بار درخواست داده می تواند مجدد درخواست دهد List <MailInboxModel> mailInboxmodelList = new List <MailInboxModel>(); MailInboxDO mailInboxdo = new MailInboxDO(); mailInboxmodelList = mailInboxdo.Search(new MailInboxModel { receiveDate = message.Headers.DateSent.ToShortDateString() }); int countInaDay = 0; foreach (MailInboxModel tmpMail in mailInboxmodelList) { if (tmpMail.MessageBody != null && tmpMail.MessageBody.Contains(AcountNumber)) { countInaDay++; } } if (countInaDay <= 9) { while (true) { if (!EmailReciveCheckerISbusy && !EmailAddCheckerISbusy) { EmailAddCheckerISbusy = true; messageBodyList.Add(new messageBody(trans, AcountNumber, message.Headers.From.ToString())); EmailAddCheckerISbusy = false; break; } } } else if (countInaDay <= 12) { while (true) { if (!EmailReciveCheckerISbusy && !EmailAddCheckerISbusy) { EmailAddCheckerISbusy = true; messageBodyList.Add(new messageBody(trans, AcountNumber, message.Headers.From.ToString(), true)); EmailAddCheckerISbusy = false; break; } } } } catch (IndexOutOfRangeException exp) { while (true) { if (!EmailReciveCheckerISbusy) { EmailAddCheckerISbusy = true; if (!message.Headers.From.ToString().Contains("*****@*****.**")) { messageBodyList.Add(new messageBody(0, "0", message.Headers.From.ToString())); } EmailAddCheckerISbusy = false; break; } } } catch (Exception ex) { while (true) { if (!EmailReciveCheckerISbusy) { EmailAddCheckerISbusy = true; if (!message.Headers.From.ToString().Contains("*****@*****.**")) { messageBodyList.Add(new messageBody(0, "0", message.Headers.From.ToString())); } EmailAddCheckerISbusy = false; break; } } } try { messageModel = new MailInboxModel(); messageModel.MessageHeader = message.Headers.Subject; if (msgpart != null) { messageModel.MessageBody = msgpart.GetBodyAsText().Replace("\r\n", string.Empty); } else { messageModel.MessageBody = "ERROR TO read Body"; } messageModel.MessageUID = msUid; messageModel.receiveDate = message.Headers.DateSent.ToShortDateString(); messageModel.receiveTime = message.Headers.DateSent.ToShortTimeString(); messageModel.SenderMail = message.Headers.From.Address; messageModel.Read = false; miDo.Insert(messageModel, true); } catch (Exception ex) { LogRegister("ReceiveMails_DatabaseInsert", ex.Message); } } catch (Exception e) { LogRegister("ReceiveMails", e.Message + "\r\n" + "Stack trace:\r\n" + e.StackTrace); } } } //catch (InvalidLoginException) //{ // //MessageBox.Show(this, "The server did not accept the user credentials!", "POP3 Server Authentication"); //} //catch (PopServerNotFoundException) //{ // //MessageBox.Show(this, "The server could not be found", "POP3 Retrieval"); //} //catch (PopServerLockedException) //{ // // MessageBox.Show(this, "The mailbox is locked. It might be in use or under maintenance. Are you connected elsewhere?", "POP3 Account Locked"); //} //catch (LoginDelayException) //{ // //MessageBox.Show(this, "Login not allowed. Server enforces delay between logins. Have you connected recently?", "POP3 Account Login Delay"); //} catch (Exception e) { LogRegister("ReceiveMails", e.Message); //MessageBox.Show(this, "Error occurred retrieving mail. " + e.Message, "POP3 Retrieval"); } finally { Isbusy = false; } return(messageBodyList); }