[英]Recipient email address overlapping
我最近部署了一個利用System.Net.Mail功能的C#腳本。 一旦用戶填寫了表格,郵件系統將通過將photobooth屏幕快照作為附件發送到每個電子郵件地址來工作(因此,每個用戶都應該收到唯一的圖像附件)。
該腳本可以正常工作,但我遇到一個問題:一旦互聯網連接變慢或出現隨機中斷時間,電子郵件地址就會重疊,當前來賓將收到以前用戶的附件。
我想知道是否有任何方法可以創建/撰寫新郵件而不會中斷當前的發送過程。 我正在使用Gmail。
以下是我正在使用的代碼:
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應用程序是多線程的。 因此,許多用戶可能會同時修改該文件。 在應用程序從修改該文件的步驟轉到讀取該文件的步驟的過程中,其他用戶可能已對其進行了修改。
您有兩種選擇:
Path.GetTempFileName()
類的東西來創建一個臨時文件,然后將其從保存步驟傳遞到讀取/發出消息的步驟,而不是硬編碼相同的文件名。 byte[]
從上傳步驟傳遞到發送步驟, 從而從byte數組構建Attachment
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.