Tôi đang sử dụng System.Net.Mail để gửi thư trong asp.net .. cách xóa tệp đính kèm sau khi gửi thư đính kèm .. tôi đã cố gắng sử dụng phương pháp File.Delete .. nhưng tôi nhận được lỗi này .. quá trình không thể truy cập đường dẫn tệp \ fun.jpg 'bởi vì nó đang được sử dụng bởi một quá trình khác. cảm ơn bạnxóa tệp đính kèm
Trả lời
Vứt bỏ MailMessage khi bạn thực hiện xong. Nó vẫn có một khóa trên tệp bạn đã thêm dưới dạng tệp đính kèm cho đến khi bạn làm như vậy.
var filePath = "C:\\path\\to\\file.txt";
var smtpClient = new SmtpClient("mailhost");
using (var message = new MailMessage())
{
message.To.Add("[email protected]");
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));
Output: False
Tôi tưởng tượng rằng nếu bạn vẫn có cái gì đó khóa các tập tin sau khi xử lý tin nhắn, mà bạn có thể có một khóa trên các tập tin, nhưng không có mã, chúng tôi không thể giúp đỡ bạn.
Bạn không thể xóa tệp được đính kèm sau khi gửi thư. Trước khi gửi, bạn có thể xóa.
Lỗi nói gì, đường dẫn bạn đã đề cập đang sử dụng một số quy trình khác.
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));
Lưu ý rằng chúng tôi đã tạo tệp đính kèm từ MemoryStream và chúng tôi đã đặt tên tệp đính kèm bất cứ điều gì chúng tôi muốn. Tên của tệp đính kèm trong tham số thứ hai là tên của tệp trong email chứ không phải tên trên ổ cứng hệ thống cục bộ. Trong thực tế các tập tin đính kèm không bao giờ đi vào ổ đĩa cứng của địa phương. Tham số thứ ba là kiểu Mime của phần đính kèm, trong trường hợp của chúng ta, đây là văn bản.
Chỉnh sửa: use Dispose() the mail
Mở rộng lớp MailMessage là một cách tốt để giải quyết này và giảm nguy cơ chạy vào vấn đề này một lần nữa ...
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));
}
}
... và nhớ để sử dụng với một 'sử dụng' xây dựng (mà bạn nên sử dụng anyway) ...
using(SmtpClient client = GetMySmtpClient())
using(MyMailMessage msd = new MyMailMessage())
{
msg.Attach(filename);
client.send(msg);
}
Bạn chỉ cần vứt bỏ đối tượng tin nhắn trước khi xóa tệp. Ví dụ:
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!
Nếu email của bạn có rất nhiều File đính kèm
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. Xóa Tệp đính kèm kẹp giấy trong Activeadmin
- 2. imap - nhận tệp đính kèm
- 3. Cách truy vấn số lượng tệp đính kèm từ trường Tệp đính kèm trong Microsoft Access?
- 4. php gửi email html kèm theo tệp đính kèm .csv
- 5. Mở tệp đính kèm email trong Android
- 6. Tệp đính kèm Zend Mail 2.0
- 7. Giải mã MIME (HTML + Tệp đính kèm)
- 8. Vị trí tệp đính kèm trong JIRA
- 9. đính kèm tệp văn bản vào email
- 10. Nhiều tệp đính kèm qua phpmailer
- 11. cách thêm tệp đính kèm trong PHPMailer?
- 12. MacOSX: thư mới có tệp đính kèm
- 13. Tệp đính kèm IMAP truy xuất lệnh
- 14. Nhiều tệp đính kèm trong C#
- 15. sendmailR (Part2): Gửi tệp dưới dạng tệp đính kèm thư
- 16. Gửi tệp đã tải lên dưới dạng tệp đính kèm
- 17. Email file đính kèm
- 18. chờ gdb đính kèm
- 19. đính kèm email trên iphone
- 20. iOS: gửi email với tập tin đính kèm thêm một đính kèm (.txt) nộp tự động
- 21. tải xuống tệp đính kèm thư bằng Java
- 22. Cách chuyển đổi mảng byte thành tệp đính kèm thư
- 23. Gửi email có tệp đính kèm trong Ruby
- 24. Cách đính kèm nhiều tệp vào một email bằng JavaMail?
- 25. Nhiều cột tệp đính kèm trong danh sách SharePoint
- 26. Làm cách nào để gửi tệp đính kèm bằng SMTP?
- 27. Trích xuất các tệp đính kèm e-mail trên Unix
- 28. Cách đính kèm tệp vào thông báo email trong Teamcity
- 29. Django: workbook tiết kiệm openpyxl dưới dạng tệp đính kèm
- 30. Nhiều tệp đính kèm email trên Android bằng Intent
tôi nghĩ rằng bạn cần phải vứt bỏ các đối tượng tập tin đính kèm. – anishMarokey