Pergunta

We are implementing the code of downloading the attachment of Gmail A.C using

openpop3 namespace. In this code we are checking the attachment size if attachment

size is greater than specify value (value set in config file in kb).then it has to

send email to sender .... It works fine in windows application but whenever I implement code

in Window service it is getting a problem. It exit function from this line of code

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

Framework:3.5 V.S:2008 Language# Open POP namespace 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");
            }



        }
Foi útil?

Solução

Thanks @Antonio Bakula I wrote try catch block in my windows service app and logging it. Then I understood my bug and it gave exception, can't read message another instance is already reading. This was because the code is timer-based and

I was firing event after every 1 minute. Now I added code to stop timer as soon as it starts email processing and start timer once it finishes email processing code.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top