Служба Windows выхода OpenPop из кода GetMessage, тот же код ОК, приложение win

Мы внедряем код загрузки вложения Gmail AC с помощью

пространство имен openpop3. В этом коде мы проверяем размер вложения, если вложение

размер больше указанного значения (значение, заданное в конфигурационном файле в кб).

отправить письмо отправителю.... Это прекрасно работает в приложении Window s, но всякий раз, когда я реализую код

в службе Window s это становится проблемой. Выход из функции из этой строки кода

OpenPop.Mime.Message m = popClient.GetMessage(i);

Framework:3.5 VS:2008 Язык # Открытое пространство имен POP V2.0.4.369

This is my code

 OpenPop.Mime.Message m = popClient.GetMessage(i);


private void ReceiveMails()
    {

            Utility.Log = true;
            if (popClient.Connected)
            {
                popClient.Disconnect();
            }
            popClient.Connect(POPServer, port, ssl);
            popClient.Authenticate(username, password);
            int Count = popClient.GetMessageCount();
            writeToLogFile("Total Mail count is:" + Count.ToString());
            if (Count > 0)
            {
                for (int i = 1; i <= Count; i++)
                {
                    flag = false;

                    OpenPop.Mime.Message m = popClient.GetMessage(i);
                    Sub = m.Headers.Subject;
                   int size = popClient.GetMessageSize(i);
                    int mailsize = int.Parse(ConfigurationSettings.AppSettings

["emailSize"]) * 1024;



                    if (size < mailsize)
                    {
                    //we are checking the sub of Email
                    for (int j = 1; j < 30; j++)
                    {

                        strFranchisekey = ConfigurationSettings.AppSettings

["Franchise" + j];
                        if (strFranchisekey != "")
                        {
                            int inex = strFranchisekey.IndexOf("=");
                            strFranchiseshortvalue = strFranchisekey.Substring

(0, inex);

                            if (Sub.Contains(strFranchiseshortvalue))
                            {
                                flag = true;

                                foreach (OpenPop.Mime.MessagePart attachment in 

m.FindAllAttachments())
                                {
                                    writeToLogFile(attachment.FileName);
                                    file = attachment.FileName;
                                    index = strFranchisekey.IndexOf("=");
                                    string StrCity = strFranchisekey.Substring

(index + 1);
                                    strFolderPath = 

(ConfigurationSettings.AppSettings["FolderPath" +StrCity]);
                                    StrSubFolderPath = 

(ConfigurationSettings.AppSettings["SubPath" + StrCity]);
                                    if (Directory.Exists(strFolderPath))
                                    //we are checking folder exists or not ?
                                    {
                                        File.WriteAllBytes(strFolderPath + "\\" 

+ file, attachment.Body);
                                    }
                                    //
                                    else if (Directory.Exists

(StrSubFolderPath))
                                    {
                                        File.WriteAllBytes(StrSubFolderPath + 

"\\" + file, attachment.Body);
                                    }
                                    else
                                    {
                                        //we can give here invalid path.
                                        File.WriteAllBytes

(ConfigurationSettings.AppSettings["InvalidPath"] + "\\" + file, attachment.Body);
                                        sendEmail(i);

                                    }
                                }
                                break;
                            }

                        }
                    }
                    if (flag != true)
                    {
                        writeToLogFile("matching franchise name is not found");

                        foreach (OpenPop.Mime.MessagePart attachment in 

m.FindAllAttachments())
                        {
                            File.WriteAllBytes

(ConfigurationSettings.AppSettings["InvalidPath"] + "\\" + file, attachment.Body);

                        }
                        sendEmail(i);
                    }

                }
             }
    else
  {
     writeToLogFile("Please reduce the  email size");
   }

            }
            else
            {
                writeToLogFile("No New Attachment");
            }



        }

1 ответ

Решение

Спасибо @Antonio Bakula, которую я написал, попробуйте перехватить блокировку в моем приложении службы Windows и войдите в него. Тогда я понял свою ошибку, и она вызвала исключение, не может прочитать сообщение, которое уже читает другой экземпляр. Это было потому, что код основан на таймере и

Я стрелял в событие после каждой минуты. Теперь я добавил код для остановки таймера, как только он начинает обработку электронной почты, и запускает таймер, как только он заканчивает код обработки электронной почты.

Другие вопросы по тегам