删除附件文件

我正在使用System.Net.Mail在asp.net中发送邮件..如何在附件邮件发送后删除附件文件..我试图使用File.Delete方法..但我收到此错误..进程无法访问文件路径\ fun.jpg’,因为它正由另一个进程使用。 谢谢

完成后处理MailMessage。 它仍然锁定您作为附件添加的文件,直到您这样做。

var filePath = "C:\\path\\to\\file.txt"; var smtpClient = new SmtpClient("mailhost"); using (var message = new MailMessage()) { message.To.Add("to@domain.com"); message.From = new MailAddress("from@domain.com"); message.Subject = "Test"; message.SubjectEncoding = Encoding.UTF8; message.Body = "Test " + DateTime.Now; message.Attachments.Add(new Attachment(filePath)); } if (File.Exists(filePath)) File.Delete(filePath); Console.WriteLine(File.Exists(filePath)); 

输出:错误

我想如果你在处理完邮件后还有一些锁定文件的东西,你可能还有另一个锁定文件,但没有代码,我们无法帮助你。

发送邮件后,您无法删除附件。在发送之前,您可以删除。

错误说的是,你提到的路径是使用其他一些过程。

 MailMessage Message = new MailMessage(); Message.Subject = "Attachment Test"; Message.Body = "Check out the attachment!"; Message.To.Add("webmaster@15Seconds.com"); Message.From = "someone@somedomain.com"; Message.Attachments.Add(new Attachment(memorystream, "test.txt", MediaTypeNames.Application.Text)); 

请注意,我们从MemoryStream创建了附件,我们必须将附件命名为我们想要的任何名称。 第二个参数中附件的名称是电子邮件中文件的名称,而不是本地系统硬盘驱动器上的名称。 事实上,附件永远不会进入本地硬盘驱动器。 第三个参数是附件的Mime类型,在我们的例子中,这是文本。

编辑: use Dispose() the mail

扩展MailMessage类是解决此问题的好方法,并再次降低遇到此问题的可能性……

 class MyMailMessage : MailMessage, IDisposable { private List _tempFiles = new List(); public void Attach(string filename) { base.Attachments.Add(new Attachment(filename)); this._tempFiles.add(filename); } new public void Dispose() { base.Dispose(); this._tempFiles.Foreach(x => File.Delete(x)); } } 

…并且记得使用’using’结构(无论如何你应该使用它)……

 using(SmtpClient client = GetMySmtpClient()) using(MyMailMessage msd = new MyMailMessage()) { msg.Attach(filename); client.send(msg); } 

您只需在删除文件之前处置消息对象。 例如:

  Dim message As New MailMessage message.From = New MailAddress(fromEmail, fromName) message.Subject = subject message.CC.Add(toCCEmail) message.Bcc.Add(toBCCEmail) Dim attach As Attachment = New Attachment(attachmentPath) message.Attachments.Add(attach) message.IsBodyHtml = True message.Body = body mailClient.Send(message) message.Dispose() 'Add this line to dispose the message! 

如果您的邮件有很多附件

 List lstAtt = new List(); Attachment att = new Attachment(file); lstAtt.Add(att); //finally foreach(var a in lstAtt) { a.Dispose(); } //delete file