首页 > 解决方案 > 使用和处理带有 MailMessage 的附件

问题描述

我有这个代码:

using (var msg = new System.Net.Mail.MailMessage())
{
    msg.Subject = subject;
    msg.From = new System.Net.Mail.MailAddress(fromEmail);
    msg.To = new System.Net.Mail.MailAddress(toEmail);        
    msg.Body = body;

    var attachment = new System.Net.Mail.Attachment(file);
    msg.Attachments.Add(attachment);

    //using (var attachment = new System.Net.Mail.Attachment(file))
    //    msg.Attachments.Add(attachment);

    using (var smtp = new System.Net.Mail.SmtpClient("smtp", 587))
    {
        smtp.Send(msg);
    }; 
}

就我而言,文件附件是可选的。
当我使用usingonattachment时,smtp.Send()抛出:

内部异常 1:ObjectDisposedException:无法访问已关闭的文件

我的问题是如何正确处理这个问题?MailMessage如果我没有在附件上明确使用,是否也会处理内部附件Dispose

标签: c#emailsmtpattachment

解决方案


请查看MailMessage的 .net 源代码

如果有附件,将被丢弃。

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();
            }
        }
    }

推荐阅读