использование и удаление вложений с помощью MailMessage - PullRequest
1 голос
/ 01 ноября 2019

У меня есть этот код:

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

В моем случае файл необязательно .
Когда я использую using на attachment, smtp.Send()throws:

Внутреннее исключение 1: ObjectDisposedException: Невозможно получить доступ к закрытому файлу

Мой вопрос, как правильно это обработать? Будет ли MailMessage распоряжаться внутренним вложением (ями) также, если я явно не использую Dispose для вложения (ей)?

1 Ответ

2 голосов
/ 01 ноября 2019

Пожалуйста, посмотрите исходный код .net для MailMessage

Он будет удален, если есть вложение.

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();
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...