2012-04-19 16 views
6

Sistemimdeki e-postaları göndermek için System.Net.Mail kullanıyorum. Aşağıdaki kod ile ekleri ile e-posta göndermeye çalışıyordum.System.Net.Mail kullanarak e-posta gönder E-posta gönder

Collection<string> MailAttachments = new Collection<string>(); 
    MailAttachments.Add("C:\\Sample.JPG"); 
    mailMessage = new MailMessage(); 
    foreach (string filePath in emailNotificationData.MailAttachments) 
    { 
     FileStream fileStream = File.OpenWrite(filePath); 
     using (fileStream) 
     { 
     Attachment attachment = new Attachment(fileStream, filePath); 
     mailMessage.Attachments.Add(attachment); 
     } 
    } 
    SmtpClient smtpClient = new SmtpClient(); 
    smtpClient.Host = SmtpHost; 
    smtpClient.Send(mailMessage); 

E-postaları eklerle birlikte gönderdiğimde, aşağıdaki gibi bir özel durum oluşturur.

using (fileStream) 
{ 
    Attachment attachment = new Attachment(fileStream, filePath); 
    mailMessage.Attachments.Add(attachment); 
} // <-- file stream is closed here 

Ancak dere artık açık değil stmpClient.Send(mailMessage), anında okunur:

Cannot access a closed file. 
at System.IO.__Error.FileNotOpen() 
at System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count) 
at System.Net.Mime.MimePart.Send(BaseWriter writer) 
at System.Net.Mime.MimeMultiPart.Send(BaseWriter writer) 
at System.Net.Mail.Message.Send(BaseWriter writer, Boolean sendEnvelope) 
at System.Net.Mail.MailMessage.Send(BaseWriter writer, Boolean sendEnvelope) 
at System.Net.Mail.SmtpClient.Send(MailMessage message) 

cevap

11

sizin using ifadenin biten küme ayracı dosya akışı kapatır.

basit çözüm yerine akışının sadece dosya adı sağlamaktır:

Bu çözüm ile
Collection<string> MailAttachments = new Collection<string>(); 
MailAttachments.Add("C:\\Sample.JPG"); 

mailMessage = new MailMessage(); 
foreach (string filePath in emailNotificationData.MailAttachments) 
{ 
    Attachment attachment = new Attachment(filePath); 
    mailMessage.Attachments.Add(attachment); 
} 
SmtpClient smtpClient = new SmtpClient(); 
smtpClient.Host = SmtpHost; 
smtpClient.Send(mailMessage); 

, .NET kütüphanesi, okuma ve dosyayı kapatarak açılış dert gerekecektir.

+0

Bitti ... Dosya akışını kaldırdım – udaya726