Пример #1
0
 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);
     }
 }
Пример #2
0
        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);
        }