如何知道该电子邮件已发送,附件是否可以删除?

时间:2019-03-11 09:23:34

标签: c# wpf smtpclient

我有一个方法,该方法可以按确定的路径保存屏幕截图,然后生成电子邮件,并在屏幕上附加屏幕截图。据我了解,发送之后-正在创建使用附件文件的特殊线程,因此在该线程正常工作时无法删除它。因此,我需要知道何时可以访问该文件以进行删除。

这是我的代码:

-配置smtp

private SmtpClient CreateSMTP()
{
    var smtp = new SmtpClient("gate");
    smtp.UseDefaultCredentials = false;
    smtp.Credentials = new NetworkCredential("notifications@****.com", "3eCMCQxFde");
    smtp.Port = 25;
    smtp.EnableSsl = false;

    return smtp;
}

-制作消息

public MailMessage MakeMessage(bool screenshotFlag)
    {
        MailAddress from = new MailAddress("notifications@****.com", Name);
        MailAddress to = new MailAddress("****@****.com");
        MailMessage message = new MailMessage(from, to);

        message.Subject = Subject == string.Empty ? string.Empty : Subject;
        message.Body = MessageText;
        message.Body = GenerateLogAndExceptionInfo(message.Body);
        message.BodyEncoding = Encoding.Unicode;

        message.ReplyTo = new MailAddress(Mail);

        if (screenshotFlag)
        {
            CreateScreenshot();
            message.Attachments.Add(new Attachment(MailHelper.FeedBackScreenShotPath));
        }

        return message;
    }

-发送电子邮件

public void SendMessage()
{
    using (SmtpClient smtp = CreateSMTP())
    {
        smtp.Send(MakeMessage(SendWithScreenshot));
    }
}

2 个答案:

答案 0 :(得分:2)

来自documentation

  

这些方法在发送消息时会阻塞。

因此,在传输消息时,该方法将阻塞。因此,在完成该方法并处置了消息实例之后,可以删除该文件。

当然,它仍然可以锁定文件。这就是为什么我要说您应该首先处理SmtpClient,然后尝试删除文件的原因(在using块之后也要这样做)。那就没事了。

答案 1 :(得分:0)

我已经看到文件是由消息对象保存的,而不是由smtp对象保存的,所以我也为消息添加了代码块。

感谢所有人)