Служба 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 и войдите в него. Тогда я понял свою ошибку, и она вызвала исключение, не может прочитать сообщение, которое уже читает другой экземпляр. Это было потому, что код основан на таймере и
Я стрелял в событие после каждой минуты. Теперь я добавил код для остановки таймера, как только он начинает обработку электронной почты, и запускает таймер, как только он заканчивает код обработки электронной почты.