2016-01-14 48 views
5

Phương thức của tôi sẽ gửi email bằng Máy chủ chuyển tiếp SMTP.C# Gửi email có tệp đính kèm (hình ảnh)

Mọi thứ hoạt động tốt (email được gửi), ngoại trừ tệp đính kèm (hình ảnh) bằng cách nào đó được nén/không tồn tại và không thể truy xuất từ ​​email.

Phương pháp này trông như thế này:

public static bool SendEmail(HttpPostedFileBase uploadedImage) 
     { 
      try 
      {    
       var message = new MailMessage() //To/From address 
       { 
        Subject = "This is subject." 
        Body = "This is text." 
       };        

        if (uploadedImage != null && uploadedImage.ContentLength > 0) 
        { 
         System.Net.Mail.Attachment attachment; 
         attachment = new System.Net.Mail.Attachment(uploadedImage.InputStream, uploadedImage.FileName); 
         message.Attachments.Add(attachment); 
        } 
       message.IsBodyHtml = true; 

       var smtpClient = new SmtpClient(); 
       //SMTP Credentials 
       smtpClient.Send(message); 
       return true; 
      } 
      catch (Exception ex) 
      { 
      //Logg exception 
       return false; 
      } 
     } 
  1. Các uploadedImage không phải là null.
  2. Độ dài nội dung là 1038946 byte (kích thước chính xác).

Tuy nhiên, email được gửi chứa hình ảnh dưới dạng tệp đính kèm với tên tệp chính xác, mặc dù kích thước của nó là 0 byte.

Tôi đang thiếu gì?

Trả lời

1

Tham số thứ hai của hàm tạo System.Net.Mail.Attachment không phải là tên tệp. Đó là content type. Và có lẽ đảm bảo vị trí luồng của mình là 0 trước để tạo ra tập tin đính kèm

1

@ChrisRun,

  1. Bạn nên thay đổi các tham số HttpPostedFileBase như byte [] ví dụ. Bằng cách này, bạn có thể sử dụng lại lớp học của mình ở nhiều nơi hơn.
  2. Hãy thử thay đổi Tên tệp cho ContentType và thêm MediaTypeNames.Image.Jpeg.
  3. Ngoài ra, thêm chỉ thị sử dụng cho xử lý các MailMessage và SmtpClient

    using (var message = new MailMessage 
        { 
         From = new MailAddress("[email protected]"), 
         Subject = "This is subject.", 
         Body = "This is text.", 
         IsBodyHtml = true, 
         To = { "[email protected]" } 
        }) 
        { 
         if (imageFile != null && imageFile.ContentLength > 0) 
         { 
          message.Attachments.Add(new Attachment(imageFile.InputStream, imageFile.ContentType, MediaTypeNames.Image.Jpeg)); 
         } 
    
         using (var client = new SmtpClient("smtp.gmail.com") 
         { 
          Credentials = new System.Net.NetworkCredential("user", "password"), 
          EnableSsl = true 
         }) 
         { 
          client.Send(message); 
         } 
        } 
    

Cheers

+0

Đầu tiên: Cảm ơn bạn cho ý kiến ​​của bạn. Thứ hai: Không hoạt động với tham số ContentType làm tham số. – ChrisRun

+0

@ChrisRun, tôi đã chỉnh sửa câu trả lời trước đó của tôi bằng mã làm việc. Hãy cho tôi biết nếu nó làm việc cho bạn. – Eulogy

+0

xin lỗi, vẫn không hoạt động. Giải pháp duy nhất tôi tìm thấy trước tiên là lưu tệp trên máy chủ và sau đó đặt đường dẫn đến vị trí thực của tệp đó. – ChrisRun

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