ASP.NET'de posta göndermek için System.Net.Mail kullanıyorum .. ek dosya olarak gönderildikten sonra ek dosya nasıl silinir .. File.Delete yöntemini kullanmayı denedim .. ama Bu hatayı alıyorum .. işlem başka bir işlem tarafından kullanıldığından \ dosya.wpg 'dosya yoluna erişemiyor. Teşekkür ederizek dosyayı sil
cevap
imha onunla bitirdiniz. Hala yapana kadar ek olarak eklediğiniz dosya üzerinde bir kilit vardır.
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));
Çıkışı: Yanlış
hayal ediyorumhala büyük olasılıkla dosya üzerinde başka kilit var ama kodu olmadan, size yardımcı olamaz, bir şeyler mesajı elden sonra dosyayı kilitleme varsa o sen. MailMessage sınıfını genişletme
Posta gönderdikten sonra ekli bir dosyayı silemezsiniz. Göndermeden önce silebilirsiniz.
Hata ne diyor, belirtilen yol, başka bir işlem kullanıyor. Biz MemoryStream eki yarattı ve biz istediğiniz ek herhangi bir ad lazım
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));
dikkat edin. İkinci parametrede ekin adı, e-postadaki dosyanın adıdır, yerel sistem sabit sürücüsündeki ad değil. Aslında ek hiçbir zaman yerel sabit diske gitmez. Üçüncü parametre ekin Mime türüdür, bizim durumumuzda bu metin.
Düzenleme: MailMessage ait use Dispose() the mail
... Bu çözmek ve tekrar bu sorun haline çalışan olasılığını azaltmak için iyi bir yoldur
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));
}
}
... ve (a 'kullanarak' yapı ile kullanmayı unutmayın ki Eğer
using(SmtpClient client = GetMySmtpClient())
using(MyMailMessage msd = new MyMailMessage())
{
msg.Attach(filename);
client.send(msg);
}
sadece dosyayı silmeden önce mesaj nesneyi atmak gerek ...) zaten kullanılıyor olmalıdır. Örn:
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!
Posta sürü Ekleri
i eki nesneleri atmak gerektiğini düşünüyorumList<Attachments> lstAtt = new List<Attachments>();
Attachment att = new Attachment(file);
lstAtt.Add(att);
//finally
foreach(var a in lstAtt)
{
a.Dispose();
}
//delete file
varsa. – anishMarokey