gpt4 book ai didi

c# - 为什么 SMTP 邮件附件在客户端处理时不处理?

转载 作者:太空宇宙 更新时间:2023-11-03 17:40:46 25 4
gpt4 key购买 nike

这是我最近解决的一个问题,但想知道是否有人可以帮我解决这个问题,因为我不完全了解到底发生了什么。我创建了一个简单的 smtp 电子邮件客户端并将其包装在一个 using 语句中以处理它。在电子邮件中,我添加了一个我即时生成的 PDF 文件附件。发送电子邮件后,我想销毁 PDF,因为它临时保存在机器本地以便发送电子邮件。当 File.Delete() 方法运行时,我会收到 IIS 工作进程正在锁定文件的错误。我不明白为什么在我尝试删除文件之前我的客户已经被处理掉了。最后我发现在删除文件之前我还必须处理附件。所以,我的问题是为什么不处理客户端也处理附件?附件不是客户的一部分,因此一旦客户被处理掉就应该被处理掉吗?示例代码如下:

try
{
using (SmtpClient SmtpMail = new SmtpClient(""))
{
MailMessage message = new MailMessage(From, To, Subject, Body);
message.IsBodyHtml = false;
message.Priority = MailPriority.Normal;
Attachment attachment = new Attachment(pdfString);
message.Attachments.Add(attachment);
SmtpMail.Send(message);
attachment.Dispose(); //Why is this needed?
}
}

最佳答案

SmtpClient 的 Send() 方法不(也不应该)负责处理 MailMessage(及其相关 Assets )。 SmtpClient 无法假设您在发送 MailMessage 后的预期用途。您可能希望继续使用 MailMessage 或附件流来做其他事情。

让我们考虑一个 MailMessage 实例将被多个 SmtpClient 重复使用的情况。

var message = new MailMessage();

using(var client1 = new SmtpClient())
{
client1.Send(message);
}

...

using(var client2 = new SmtpClient())
{
client2.Send(message);
}

如果消息的附件在第一次调用后已经处理完毕,则第二次调用将失败。

让 SmtpClient 假设您在第一次发送 MailMessage 后就完成了它是不正确的。 Send() 方法应该发送电子邮件,而不是发送并处理消息 Assets 。您的程序可能需要在程序的后面对附件流做进一步的工作。

关于c# - 为什么 SMTP 邮件附件在客户端处理时不处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24712306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com