C#Smtp作为附件发送后删除文件;被拒绝是因为它正在使用中?

时间:2015-09-28 02:56:35

标签: c# .net smtp delete-file smtpclient

发送带附件的电子邮件后,我遇到了问题。 发送此文件后,我想删除此文件,并且该进程被拒绝,因为另一个进程正在使用我要删除的文件。

这是我得到的消息: “该进程无法访问文件'C:\ Users \ x \ AppData \ Roaming \ ipconfig.txt',因为它正由另一个进程使用。”

我有一些代码:

    public static void SendAnEmail(string host, string username, string password, string mailTo, string subject, string body, List<string> attachmentsFileNames)
    {
        SmtpClient client = new SmtpClient();
        client.Port = 587;
        client.Host = host;
        client.EnableSsl = true;
        client.Timeout = 60000;
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.UseDefaultCredentials = false;
        client.Credentials = new System.Net.NetworkCredential(username, password);

        MailMessage mailMessage = new MailMessage(username, mailTo, subject, body);
        foreach(string singleAttachmentFileName in attachmentsFileNames)
        {
            Attachment attachment = new Attachment(singleAttachmentFileName, "text/plain");
            mailMessage.Attachments.Add(attachment);
        }
        mailMessage.BodyEncoding = UTF8Encoding.UTF8;
        mailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
    }

这是SendAnEmail函数的调用,并尝试删除我作为附件发送的文件。

            Transport.SendAnEmail(Settings.mailHost, Settings.mailUsername, Settings.mailPassword, Settings.mailTargetAddress, Settings.ftpDirectory, " ", Settings.attachmentsListFileNames);

            foreach(string singlePath in Settings.attachmentsListFileNames)
                File.Delete(singlePath);

我想建议如何解决此问题,并在发送带附件的电子邮件后删除这些附件。

如果不清楚,请问我。

编辑: 当然,我正在使用C#,框架4.5,WPF。目标平台是Windows,用于编程的环境是Visual Studio 2013:)

1 个答案:

答案 0 :(得分:0)

在删除之前,您必须这样做:

mailMessage.Attachments.Dispose();
client.Dispose();

它对我有用。