我已經制作了一個應用程序,將一些文件壓縮並通過電子郵件發送。大約有70個文件(它們的總大小約爲800kb)。電子郵件發件人凍結
的壓縮過程凍結我的應用程序(但其確定,因爲它需要大約一秒鐘)
的問題是與電子郵件程序。調試時,我發現整個電子郵件製備過程是相當快的,除了
smtp.Send(消息)
其完全凍結我的應用程序:5秒後,應用程序仍在運行但是從任務欄消失,並且即使在電子郵件發送之後,應用程序仍然不響應。
發送電子郵件功能:
public void SendMail(string FromGmailEmail, string GmailPassword, string ToEmail, string Subject, string Body, string[] AttachmentsPaths)
{
var fromAddress = new MailAddress(FromGmailEmail, "None");
var toAddress = new MailAddress(ToEmail, "None");
string fromPassword = GmailPassword;
string subject = Subject;
string body = Body;
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 587,
EnableSsl = true,
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential(fromAddress.Address, fromPassword)
};
var message = new MailMessage(fromAddress, toAddress);
message.Subject = subject;
message.Body = body;
try
{
for (int i = 0; i < AttachmentsPaths.Length; i++)
message.Attachments.Add(new Attachment(AttachmentsPaths[i]));
}
catch (FileNotFoundException)
{
}
smtp.Timeout = int.MaxValue;
smtp.Send(message);
}
我發送電子郵件時,打開一個新的線程。
public void OpenEmailThread(string FromGmailEmail, string GmailPassword, string ToEmail, string Subject, string Body, string[] AttachmentsPaths)
{
Thread thread = new Thread(() => SendMail(FromGmailEmail, GmailPassword, ToEmail, Subject, Body, AttachmentsPaths));
thread.Name = "EmailThread";
thread.Start();
}
側面說明:由於某種輸出告訴我:
型 'System.IO.IOException' 的第一次機會異常出現在mscorlib.dll
上
smtp.Send(message)
(但是這是我最不問題)
編輯:原來我是編輯文件,而他發送。我知道這會發生,這就是爲什麼我在發郵件時添加了一個名爲「IsEmailing」的bool變量來鎖定文件。原來這些文件仍然在「smtp.Send(message);」之後上傳。
解決方案:在發送之前將郵件附件壓縮並且僅在發送之前。這樣,壓縮文件只會出現一次,所以不能修改.zip文件。
購買更好的互聯網服務或使用BackgroundWorker。 – 2011-05-28 23:41:07