我使用System.Net.Mail在asp.net中发送邮件.. 如何删除附件文件后它作为附件邮件发送.. 我试图使用File.Delete方法..但我得到这个错误.. 该进程无法访问文件路径\ fun.jpg',因为它正在被另一个进程使用。 谢谢删除附件文件
Q
删除附件文件
14
A
回答
26
MAILMESSAGE的处置,当你用它做。 它仍然锁定您作为附件添加的文件,直到您完成。
var filePath = "C:\\path\\to\\file.txt";
var smtpClient = new SmtpClient("mailhost");
using (var message = new MailMessage())
{
message.To.Add("[email protected].com");
message.From = new MailAddress("[email protected]");
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));
输出:假
我可以想象,如果你还有什么配置的消息后,文件锁定,你可能对文件的另一个锁,但没有代码,我们不禁您。
1
不能发送mail.Before发送您可以删除后删除附加的文件。
什么错误说,你提到的路径是使用其他进程。
MailMessage Message = new MailMessage();
Message.Subject = "Attachment Test";
Message.Body = "Check out the attachment!";
Message.To.Add("[email protected]");
Message.From = "[email protected]";
Message.Attachments.Add(new Attachment(memorystream, "test.txt", MediaTypeNames.Application.Text));
请注意,我们从MemoryStream创建了附件,我们得到了附件的任何我们想要的名称。在第二个参数附件的名称是在电子邮件中的文件,而不是本地系统硬盘驱动器上的名称的名称。事实上,附件永远不会去到本地硬盘。第三个参数是附件的Mime类型,在我们的例子中,这是文本。
编辑:use Dispose() the mail
0
扩展类MAILMESSAGE是解决这一点,并减少运行到再次这一问题的机会的好方法...
class MyMailMessage : MailMessage, IDisposable
{
private List<string> _tempFiles = new List<string>();
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(SmtpClient client = GetMySmtpClient())
using(MyMailMessage msd = new MyMailMessage())
{
msg.Attach(filename);
client.send(msg);
}
0
你只需要在删除文件之前处理消息对象。 E.g:
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!
0
如果您的邮件有很多附件
List<Attachments> lstAtt = new List<Attachments>();
Attachment att = new Attachment(file);
lstAtt.Add(att);
//finally
foreach(var a in lstAtt)
{
a.Dispose();
}
//delete file
相关问题
- 1. 的Sharepoint附件删除文件名
- 2. 删除CouchDb中的文档附件
- 3. 删除(附近)重复文件
- 4. 删除所有文件附加信息?
- 5. 附加到pickle文件而不删除
- 6. JQuery删除附加的文件
- 7. 用php删除mime附件
- 8. 删除所有附件
- 9. MVCMailer SendAsync并删除附件
- 10. 动态删除附件?
- 11. VBA - Outlook不删除附件
- 12. Wordpress删除附件功能
- 13. 文件#删除不删除文件
- 14. 删除电子邮件附件在Outlook
- 15. 发送电子邮件附件后删除c#文件
- 16. 作为邮件附件发送后删除pfd文件
- 17. SevenZipSharp - 将文件附加到zip并删除文件路径
- 18. 从文件夹和文件中删除附加的“-1”
- 19. 删除文件
- 20. 删除文件
- 21. 删除文件
- 22. 删除文件
- 23. 文件删除
- 24. 删除文件
- 25. 删除文件
- 26. 删除文件
- 27. 删除文件
- 28. Delphi - TIdAttachment,从附件的文件名中删除路径
- 29. 通过SmtpClient(ASP.NET MVC)发送邮件后删除附加文件
- 30. 十月CMS - 删除未保存模型的文件附件
我认为你需要处理的附件对象。 – anishMarokey 2010-05-18 12:43:09