电子邮件发件人冻结
本文关键字:冻结 电子邮件 | 更新日期: 2023-09-27 17:57:50
我制作了一个应用程序,可以压缩一些文件并通过电子邮件发送。大约有70个文件(它们的总大小约为800kb)。
zip过程冻结了我的应用程序(但还好,因为它大约需要一秒钟)
问题出在电子邮件流程上。在调试过程中,我发现除了之外,整个电子邮件准备过程都很快
smtp.发送(消息)
这完全冻结了我的应用程序: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();
}
旁注:对于一些输出告诉我:
mscorlib.dll 中首次出现"System.IO.IOException"类型的异常
在上
smtp.发送(消息)
(但这是我最小的问题)
编辑:原来他发送文件时我正在编辑文件。我知道这会发生,这就是为什么我在发送电子邮件时添加了一个名为"IsEmaging"的bool变量来锁定文件。事实证明,在"smtp.Send(message);"之后,文件仍在上传。
解决方案:在发送前对附件进行压缩,仅在发送前进行压缩。这样,zip只会出现一次,因此不能修改.zip文件
我用它在一个新线程上发送邮件,它工作正常…
public void SendEmail(string from, string to, string subject, string body, string attachPath)
{
Thread threadSendMails;
threadSendMails = new Thread(delegate()
{
sendEmail(from, to, subject, body, attachPath);
});
threadSendMails.IsBackground = true;
threadSendMails.Start();
}
其中sendMail是我自己的邮件功能。