怎么知道,该电子邮件已发送,附件可以删除?

问题描述 投票:2回答:2

我有一个方法,它通过明确的路径保存屏幕截图,然后制作电子邮件消息,附加屏幕截图。正如我所知,在发送之后 - 正在创建使用附件文件的特殊线程,因此在该线程工作时我无法删除它。所以,我需要知道文件何时可以删除。

这是我的代码:

- 配置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));
    }
}
c# wpf smtpclient
2个回答
2
投票

来自documentation

消息传输时这些方法会阻塞。

因此,在传输消息时,方法会阻塞。因此,在方法完成并且您已经处理了消息实例之后,您可以删除该文件。

当然,它仍然可以锁定文件。这就是为什么我会说你应该首先处理SmtpClient然后尝试删除文件(所以在using块之后这样做)。那应该没问题。


0
投票

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

谢谢大家))

© www.soinside.com 2019 - 2024. All rights reserved.