2014-02-10 3 views
6

System.Drawing.Image를 저장하지 않고 이메일에 첨부 한 다음 저장된 경로에서 가져 오는 방법이 있습니까?C# 이메일에 System.Drawing.Image를 첨부하십시오.

지금은 이미지를 만들고 저장하는 중입니다.

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 
       { 

       } 

직접() mail.Attachments.Add에 System.Drawing.Image을 통과 어쨌든 거기 : 나는 그와 함께 이메일을 보내?

답변

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으로 변환 한 다음 스트림을 첨부 파일로 추가 할 수 있습니다. 그것은 다음과 같이 갈 것 :

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

참고 :

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

을 사용할 수 있습니다 :

System.Drawing.Image to stream C#

c# email object to stream to attachment