2014-02-10 4 views
6

Есть ли способ прикрепить System.Drawing.Image к электронной почте без сохранения его, а затем захватить его из сохраненного пути.C# Attaching System.Drawing.Image to Email

Сейчас я создаю изображение и сохраняю его. Затем я отправить письмо с:

MailMessage mail = new MailMessage(); 
       string _body = "body" 

       mail.Body = _body; 
       string _attacmentPath; 
       if (iP.Contains(":")) 
        _attacmentPath = (@"path1");//, System.Net.Mime.MediaTypeNames.Application.Octet)); 
       else 
        _attacmentPath = @"path2"); 
       mail.Attachments.Add(new Attachment(_attacmentPath, System.Net.Mime.MediaTypeNames.Application.Octet)); 
       mail.To.Add(_imageInfo.VendorEmail); 
       mail.Subject = "Rouses' PO # " + _imageInfo.PONumber.Trim(); 
       mail.From = _imageInfo.VendorNum == 691 ? new MailAddress("email", "") : new MailAddress("email", ""); 
       SmtpClient server = null; 
       mail.IsBodyHtml = true; 
       mail.Priority = MailPriority.Normal; 
       server = new SmtpClient("server"); 
       try 
       { 

        server.Send(mail); 
       } 
       catch 
       { 

       } 

Есть в любом случае, чтобы непосредственно передать System.Drawing.Image в mail.Attachments.Add()?

ответ

12

Вы не можете передать Image непосредственно в приложении, но вы можете пропустить файловую систему только сохранить изображение в MemoryStream, а затем при условии, что MemoryStream конструктору крепления:

var stream = new MemoryStream(); 
image.Save(stream, ImageFormat.Jpeg); 
stream.Position = 0; 

mail.Attachments.Add(new Attachment(stream, "image/jpg")); 
+0

+1 - Ваш код более компактен и чист, чем тот, который я использовал. =) – OnoSendai

+0

спасибо, это сработало, просто взяло меня на пару попыток понять, что мне пришлось добавить «.jpg» в конец параметра имени! – JustinV

5

Теоретически вы можете преобразовать изображение в MemoryStream, а затем добавить поток в качестве вложения. Он бы так:

public static Stream ToStream(this Image image, ImageFormat formaw) { 
    var stream = new System.IO.MemoryStream(); 
    image.Save(stream, formaw); 
    stream.Position = 0; 
    return stream; 
} 

Затем вы можете использовать следующие

var stream = myImage.ToStream(ImageFormat.Gif); 

Теперь, когда у вас есть поток, вы можете добавить его в качестве приложения:

mail.Attachments.Add(new Attachment(stream, "myImage.gif", "image/gif")); 

Ссылки:

System.Drawing.Image to stream C#

c# email object to stream to attachment