2013-03-21 37 views
5

Tôi đã tạo một ứng dụng tại nơi làm việc tạo tệp exel từ một số dữ liệu cơ sở dữ liệu. Sau khi tạo các tệp, chúng sẽ tự động được gửi đến các khách hàng được đề cập. Vấn đề của tôi là nó hoạt động tốt khi tôi chạy ứng dụng đã xuất bản. Nhưng một số người dùng khi họ chạy các ứng dụng các tập tin được tạo ra hoàn hảo khi chúng được lưu trên ổ cứng và tôi có thể nhìn thấy chúng. Nhưng khi chúng được gắn vào đối tượng MailMessage chúng bị hỏng. Đây là một hình ảnh của các tập tin bị hỏng. Những tệp này phải là tệp Excel.Tệp bị hỏng khi đính kèm chúng vào MailMessage C#

enter image description here

Đây là mã của tôi để gửi một mail với file đính kèm:

public void SendMailedFilesDK() 
     { 
      string[] sentFiles = Directory.GetFiles(sentFilesDK); 
      if (sentFiles.Count() > 0) 
      { 
       using (System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient("ares")) 
       { 
        using (System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage()) 
        { 
         msg.From = new MailAddress("[email protected]"); 
         msg.To.Add(new MailAddress("[email protected]")); 
         msg.To.Add(new MailAddress("[email protected]")); 
         msg.CC.Add("[email protected]"); 
         msg.CC.Add("[email protected]"); 
         msg.Subject = "IBM PUDO"; 
         msg.Body = sentFiles.Count() + " attached file(s) has been sent to the customer(s) in question "; 
         msg.IsBodyHtml = true; 
         foreach (string file in sentFiles) 
         { 
          Attachment attachment = new Attachment(file); 
          msg.Attachments.Add(attachment); 
         } 

         client.Send(msg); 
        } 
       } 
      } 
     } 

Tại sao các tập tin bị hỏng khi những người khác chạy các ứng dụng? Chúng tôi đang sử dụng văn phòng 2010.

Trả lời

1

Bạn nên đảm bảo đặt loại nội dung của phần đính kèm thành giá trị thích hợp.

application/vnd.openxmlformats-officedocument.spreadsheetml.sheet cho các tập tin xlsx hoặc

application/vnd.ms-excel cho các tập tin xls.

Ví dụ: vòng lặp của bạn sẽ trông giống như thế này.

ContentType xlsxContent = new ContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
foreach (string file in sentFiles) 
{ 
    Attachment attachment = new Attachment(file, xlsxContent); 
    msg.Attachments.Add(attachment); 
} 
+0

Tôi nên viết gì nếu đó là tệp Zip mà tôi cần phải thu thập? tôi đã cố gắng để chèn dòng này: ** Đính kèm tập tin đính kèm = tập tin đính kèm mới (zipFile, MediaTypeNames.Application.Zip); ** nhưng nó không hoạt động. Tôi đang sử dụng ** DotNetZipLib-DevKit-v1.9 ** – Lahib

+0

tìm thấy nó. Tôi phải sử dụng 'ứng dụng/zip' – Lahib

0

Bạn có thể muốn chỉ định mimetype là một phần của một trong các hàm tạo trên lớp Đính kèm.

Tệp đính kèm công khai (chuỗi tệpName, ContentType contentType);

Bạn cũng có thể đọc tệp trong bộ nhớ và chuyển nó dưới dạng một phần của hàm tạo sau.

Tệp đính kèm công khai (Luồng nội dungStream, string name, string mediaType);

1

Chúng tôi sử dụng điều này trong phần Xây dựng tệp đính kèm của chúng tôi và không có sự cố khi đính kèm Excel và PDF.

Dữ liệu đính kèm = tệp đính kèm mới (sFileName, MediaTypeNames.Application.Octet);

Đồng thời kiểm tra xem người dùng đang chạy quyền này có quyền truy cập vào tệp ở bất kỳ vị trí nào được chỉ định bởi sentFilesDK.

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