在 backgroundworkerdowork 事件的 Form1 中,我做了:
se.SendPhotos(photofilesDir + "\\" + "photofiles.zip");
se.SendPhotos(photofilesDir1 + "\\" + "photofiles.zip");
se.SendPhotos(photofilesDir2 + "\\" + "photofiles.zip");
se.SendPhotos(photofilesDir3 + "\\" + "photofiles.zip");
在 se 类 SendEmail 我做了:
public void SendPhotos(string fileNameToSend)
{
try
{
MailAddress from = new MailAddress("test@gmail.com", "User " + (char)0xD8 + " Name",
System.Text.Encoding.UTF8);
MailAddress to = new MailAddress("test@test");
photosmessage = new MailMessage(from, to);
photosmessage.Body = "Please check the log file attachment I have some bugs.";
string someArrows = new string(new char[] { '\u2190', '\u2191', '\u2192', '\u2193' });
photosmessage.Body += Environment.NewLine + someArrows;
photosmessage.BodyEncoding = System.Text.Encoding.UTF8;
photosmessage.Subject = "Log File For Checking Bugs" + someArrows;
photosmessage.SubjectEncoding = System.Text.Encoding.UTF8;
Attachment myAttachment = new Attachment(fileNameToSend, MediaTypeNames.Application.Octet);
photosmessage.Attachments.Add(myAttachment);
SmtpClient photossend = new SmtpClient("smtp.gmail.com", 587);
photossend.SendCompleted += new SendCompletedEventHandler(photossend_SendCompleted);
photossend.EnableSsl = true;
photossend.Timeout = 10000;
photossend.DeliveryMethod = SmtpDeliveryMethod.Network;
photossend.UseDefaultCredentials = false;
photossend.Credentials = new NetworkCredential("usern", "userpass");
string userState = "test message1";
photossend.SendAsync(photosmessage, userState);
SendLogFile.Enabled = false;
fname = fileNameToSend;
}
catch (Exception errors)
{
Logger.Write("Error sending message :" + errors);
}
}
private void photossend_SendCompleted(object sender, AsyncCompletedEventArgs e)
{
photosmessage.Dispose();
if (fname == @"C:\Users\Simbalip\AppData\Local\outputphotos\photosfiles3" + "\\" + "photofiles.zip")
{
photossendended = true;
}
}
后台workerdowork中的问题它永远不会发送最后一个photofilesDir3。我使用了一个断点,它到达:photosendended = true; 但是在我的电子邮件中,我只收到了 3 个为我发送的文件,而不是 4 个。
当我在后台工作人员上使用断点并执行 F11 时,我看到它在没有等待的情况下一个接一个地进行 4 次发送。
每次 photofiles.zip 里面都有不同的文件。现在我检查在行上做了一个断点:
if (fname == @"C:\Users\Simbalip\AppData\Local\outputphotos\photosfiles3" + "\\" + "photofiles.zip")
当它到达那里时,它一直都是真的 == fname never C:\Users\Simbalip\AppData\Local\outputphotos\photosfiles2 or 1 or photosfiles
但最后我得到了 3 个不同的 photofiles.zip 文件,每个文件都包含不同的文件,但其中一个文件从未发送过。
Myabe 我需要以某种方式发送电子邮件时,它会以某种方式发送,直到发送第一个电子邮件,然后发送下一个,例如在 Process 中存在 WaitForExit() 所以可能与电子邮件类似?