.Net 邮件附件附加到错误的电子邮件
.Net mail attachment attaching to wrong email
我有一个以前 运行 没有遇到过的问题,并且在搜索时似乎找不到任何类似的问题。
我的问题是这样的。
我有一个使用内存流附加 PDF 的电子邮件方法,然后使用 SendAsync 方法发送电子邮件。不过很少见,附件会附加到其他用户的电子邮件中。
这种情况只在极少数情况下发生过,似乎是在同一时刻发送两封电子邮件时造成的,即便如此,这种情况也很少发生。
问题是,无论多么罕见,它都不应该发生,所以我想修复它。
PDF 是通过将 URL 的结果下载 returns PDF 到 WebClient 对象中,然后使用 WebClient.DownloadData 方法的结果读取到内存中生成的溪流。
然后将内存流附加到 MailMessage 对象并使用 SMTPClient 对象的 SendAsync 方法发送。
正如我所说,这个问题很少发生,不幸的是很难测试。
这是我的代码示例(没有实际值,只是一个示例,它是如何创建的,以简化的方式,即没有错误捕获等):
var mailMessage = new MailMessage("fromaddress@test.com", "toaddress@test.com", "Subject");
var smtpClient = new SmtpClient();
mailMessage.Body = "Test";
var stream = new MemoryStream(new WebClient().DownloadData("test.com"));
var attachment = new Attachment(stream, "filename.pdf", System.Net.Mime.MediaTypeNames.Application.Pdf);
mailMessage.Attachments.Add(attachment);
smtpClient.SendCompleted += new SendCompletedEventHandler(SendCompleteCallback); // this is a method for logging errors etc
smtpClient.SendAsync(mailMessage, "randomGuidToken");
当问题确实发生时,只有同时收到这两个附件的用户才会真正收到电子邮件。其他用户什么也得不到,没有电子邮件或附件。
感谢所有帮助。
我已经解决了我的问题。
这取决于 SmtpClient 和 MailMessage classes 是如何被实例化和处理的(或者不是,在这种情况下)。
我发现原始代码是将 SmtpClient 和 MailMessage 对象创建为 class 宽变量,它在 class 构造函数中初始化,并且是唯一处理处理的代码对象位于 SendAsynCompleted 回调方法中。
我现在更改了代码,以便在 class 中需要它们的每个方法中实例化 SmtpClient 和 MailMessage 对象,并确保显式处理这些对象。
我现在也不再使用 SendAsync 方法,而只使用标准的 Send 方法(我可能会考虑回到异步方法,但我认为需要做更多的测试和重构) .
我有一个以前 运行 没有遇到过的问题,并且在搜索时似乎找不到任何类似的问题。
我的问题是这样的。
我有一个使用内存流附加 PDF 的电子邮件方法,然后使用 SendAsync 方法发送电子邮件。不过很少见,附件会附加到其他用户的电子邮件中。
这种情况只在极少数情况下发生过,似乎是在同一时刻发送两封电子邮件时造成的,即便如此,这种情况也很少发生。
问题是,无论多么罕见,它都不应该发生,所以我想修复它。
PDF 是通过将 URL 的结果下载 returns PDF 到 WebClient 对象中,然后使用 WebClient.DownloadData 方法的结果读取到内存中生成的溪流。 然后将内存流附加到 MailMessage 对象并使用 SMTPClient 对象的 SendAsync 方法发送。
正如我所说,这个问题很少发生,不幸的是很难测试。
这是我的代码示例(没有实际值,只是一个示例,它是如何创建的,以简化的方式,即没有错误捕获等):
var mailMessage = new MailMessage("fromaddress@test.com", "toaddress@test.com", "Subject");
var smtpClient = new SmtpClient();
mailMessage.Body = "Test";
var stream = new MemoryStream(new WebClient().DownloadData("test.com"));
var attachment = new Attachment(stream, "filename.pdf", System.Net.Mime.MediaTypeNames.Application.Pdf);
mailMessage.Attachments.Add(attachment);
smtpClient.SendCompleted += new SendCompletedEventHandler(SendCompleteCallback); // this is a method for logging errors etc
smtpClient.SendAsync(mailMessage, "randomGuidToken");
当问题确实发生时,只有同时收到这两个附件的用户才会真正收到电子邮件。其他用户什么也得不到,没有电子邮件或附件。
感谢所有帮助。
我已经解决了我的问题。
这取决于 SmtpClient 和 MailMessage classes 是如何被实例化和处理的(或者不是,在这种情况下)。
我发现原始代码是将 SmtpClient 和 MailMessage 对象创建为 class 宽变量,它在 class 构造函数中初始化,并且是唯一处理处理的代码对象位于 SendAsynCompleted 回调方法中。
我现在更改了代码,以便在 class 中需要它们的每个方法中实例化 SmtpClient 和 MailMessage 对象,并确保显式处理这些对象。
我现在也不再使用 SendAsync 方法,而只使用标准的 Send 方法(我可能会考虑回到异步方法,但我认为需要做更多的测试和重构) .