C# 收件人电子邮件地址重叠
我最近部署了一个利用System.Net.Mail功能的C#脚本。一旦用户填写表单,邮件系统将通过向每个电子邮件地址发送photobooth截图作为附件来工作(因此每个用户都应该收到一个唯一的图像附件) 该脚本工作完美无瑕,但我有一个问题:一旦互联网连接变慢或出现一些随机停机时间,电子邮件地址将重叠,当前的客人将收到以前用户的附件 我想知道是否有任何方法可以在不中断当前发送过程的情况下创建/撰写新邮件。顺便说一句,我正在使用Gmail 下面是我正在使用的代码:C# 收件人电子邮件地址重叠,c#,email,C#,Email,我最近部署了一个利用System.Net.Mail功能的C#脚本。一旦用户填写表单,邮件系统将通过向每个电子邮件地址发送photobooth截图作为附件来工作(因此每个用户都应该收到一个唯一的图像附件) 该脚本工作完美无瑕,但我有一个问题:一旦互联网连接变慢或出现一些随机停机时间,电子邮件地址将重叠,当前的客人将收到以前用户的附件 我想知道是否有任何方法可以在不中断当前发送过程的情况下创建/撰写新邮件。顺便说一句,我正在使用Gmail 下面是我正在使用的代码: MailMessage mail
MailMessage mail = new MailMessage();
mail.Attachments.Clear();
mail.From = new MailAddress("@gmail.com");
mail.To.Add(email);
mail.Subject = "";
mail.Body = "";
mail.Attachments.Add(new Attachment("screenshot.jpg"));
//mail.Attachments.Add (new Attachment("screenshot.jpg"));
SmtpClient smtpServer = new SmtpClient("smtp.gmail.com");
smtpServer.Port = 587;
smtpServer.Credentials = new System.Net.NetworkCredential("@gmail.com", "") as ICredentialsByHost;
smtpServer.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback =
delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
return true;
};
smtpServer.Send(mail);
//Debug.Log("success");
sent = true;
最好的解决方案是将创建和发送电子邮件的过程解耦
创建每封邮件并将其放入队列中。然后,您可以让邮件发送进程监视队列,并尽可能快地在那里传递任何邮件。在单独的线程上发送邮件,例如使用任务
Task.Factory.StartNew(() => smtpServer.Send(mail));
这是一个web应用程序,对吗?这行代码是从磁盘上的物理文件中提取的吗
mail.Attachments.Add (new Attachment ("screenshot.jpg"));
如果是这样,那就是你的问题了。Web应用程序是多线程的。因此,许多用户可能同时修改该文件。当应用程序从修改该文件的步骤转到读取该文件的步骤时,其他用户可能已经修改了该文件
您有两个选择:
字节[]
从上载步骤传递到发送步骤您好@David,这是一个基于本地的应用程序,可以将屏幕截图保存到磁盘上,然后脚本将提取数据路径并将图像附加到电子邮件中。我会看看是否能将你的建议落实到我的工作流程中。非常感谢是的!