2012-04-19 44 views
6

Tôi đang sử dụng System.Net.Mail để gửi email thông qua ứng dụng của mình. Tôi đã cố gắng gửi email với các tập tin đính kèm với mã sau đây.Gửi email với attchement bằng System.Net.Mail

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); 

Khi tôi gửi email có tệp đính kèm, nó sẽ đưa ra một ngoại lệ như sau.

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) 

Trả lời

11

Các kết thúc cú đúp xoăn của tuyên bố using bạn đóng stream file:

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

Tuy nhiên, các dòng được đọc tại thời điểm stmpClient.Send(mailMessage), nơi nó không được mở nữa.

Giải pháp đơn giản nhất là chỉ cung cấp tên file thay vì một dòng:

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); 

Với giải pháp này, các thư viện .NET sẽ phải lo lắng về việc mở, đọc và đóng tập tin.

+0

Xong ... Tôi đã xóa luồng tệp – udaya726

Các vấn đề liên quan