[英]Closing file attached to email System.Net.Mail
我有一个文件附加到 ASP.NET 应用程序中的电子邮件。 问题是进程不会放过文件。 如何关闭方法中的文件,以便我可以再次在我的程序中使用它?
Attachment data = new Attachment(@"\\WIN-UWPWZ7Z3RKX\wwwroot\katipro\skus.txt");
m.Attachments.Add(data);
SmtpClient s = new SmtpClient("smtp.gmail.com", 587);
s.Send(m);
在我调用该方法后,它不允许我再次写入该文件而没有错误。
System.Net.Mail.Attachment
实现IDisposable
。 您需要处理您的附件。
using(Attachment data = new Attachment(@"\\WIN-UWPWZ7Z3RKX\wwwroot\katipro\skus.txt"))
{
m.Attachments.Add(data);
SmtpClient s = new SmtpClient("smtp.gmail.com", 587);
s.Send(m);
}
同样,如果您使用的是 .NET Framework 4.0; SmtpClient
也是一次性的。 因此,如果您使用的是 4.0 框架,请处理掉它。 当您使用完实现 IDisposable 接口的东西时,您应该始终处理它们。
处理 MailMessage 时不需要处理附件。 如果您查看内部实现,MailMessage 确实已经处理了附件本身。
// MailMessage.cs
protected virtual void Dispose(bool disposing)
{
if (disposing && !disposed)
{
disposed = true;
if(views != null){
views.Dispose();
}
if(attachments != null){
attachments.Dispose();
}
if(bodyView != null){
bodyView.Dispose();
}
}
}
您需要释放所有用于它们的IDisposable
对象以释放非托管资源,例如文件句柄。
using(MailMessage m = ...)
{
...
using (Attachment data = ...)
{
...
using (SmtpClient s = ...)
{
...
}
}
}
Attachment
实现了IDisposable
; 发送消息后,您需要处理实例以释放其资源。
...
s.Send(m)
data.Dispose();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.