2016-01-14 3 views
5

Мой метод отправляет электронное письмо с использованием SMTP Relay Server.C# Отправка электронной почты с прикрепленным файлом (изображение)

Все работает нормально (отправляется электронное письмо), за исключением того, что прикрепленный файл (изображение) каким-то образом сжат/не существует и не может извлечь из письма.

Метод выглядит следующим образом:

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. uploadedImage не равно нулю.
  2. ContentLength - 1038946 байт (правильный размер).

Однако отправленное электронное письмо содержит изображение в виде вложения с правильным именем файла, хотя размер его составляет 0 байт.

Что мне не хватает?

ответ

1

Второй параметр конструктора System.Net.Mail.Attachment - это не имя файла. Это content type. И возможно обеспечить ваше положение поток 0 до того, чтобы создать Attachment

1

@ChrisRun,

  1. Вы должны изменить параметр HttpPostedFileBase в байт [], например. Таким образом, вы можете повторно использовать свой класс в большем количестве мест.
  2. Попробуйте изменить FileName для ContentType и добавить MediaTypeNames.Image.Jpeg.
  3. Кроме того, добавьте используя директиву распоряжаться MailMessage и 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); 
         } 
        } 
    

Приветствия

+0

Во-первых: Спасибо за Ваше мнение. Второе: также не работало с параметром ContentType. – ChrisRun

+0

@ChrisRun, я отредактировал свой предыдущий ответ с рабочим кодом. Дайте мне знать, если это сработает для вас. – Eulogy

+0

извините, все еще не работает. Единственное решение, которое я нашел, это сначала сохранить файл на сервере, а затем установить путь к физическому расположению этого файла. – ChrisRun

Смежные вопросы