如何将图像流嵌入MailMessage

flu*_*luf 13 c# email stream

我将从Properties.Resources中的图像嵌入到MailMessage中时遇到了一些困难,目前图像未显示在我收到的电子邮件中.

我已经成功地从目录位置嵌入了图像,但是如果图像来自内存/应用程序则更喜欢.

这是我正在做的简化版本.

 Bitmap b = new Bitmap(Properties.Resources.companyLogo);
 MemoryStream logo = new MemoryStream();
 b.Save(logo, ImageFormat.Jpeg);



 MailMessage newEmail = new MailMessage(from, to);
 newEmail.Subject = subject;
 newEmail.IsBodyHtml = true;

 LinkedResource footerImg = new LinkedResource(logo, "image/jpeg");
 footerImg.ContentId = "companyLogo";
 AlternateView foot= AlternateView.CreateAlternateViewFromString(body + "<p> <img src=cid:companyLogo /> </p>", null, "text/html");

 foot.LinkedResources.Add(footerImg);

 newEmail.AlternateViews.Add(foot);             

 SmtpClient server = new SmtpClient(host, port);
 server.Send(newEmail);
Run Code Online (Sandbox Code Playgroud)

flu*_*luf 25

好的,我已经解决了这个问题.

我没有使用BitMap保存方法,而是将BitMap转换为Byte []并为内存流提供Byte []

不工作 :

 b.Save(logo, ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)

工作:

Bitmap b = new Bitmap(Properties.Resources.companyLogo);
ImageConverter ic = new ImageConverter();
Byte [] ba = (Byte[]) ic.ConvertTo(b,typeof(Byte[]));
MemoryStream logo = new MemoryStream(ba);
Run Code Online (Sandbox Code Playgroud)

我认为它与Bitmap.Save方法有关,在MSDN lib中它提到流必须有0的偏移量.


Jer*_*emy 20

Bitmap b = new Bitmap(Properties.Resources.companyLogo);
MemoryStream logo = new MemoryStream();
b.Save(logo, ImageFormat.Jpeg);
Run Code Online (Sandbox Code Playgroud)

执行保存后,您必须"寻找"MemoryStream回到开始.

logo.Position = 0;
Run Code Online (Sandbox Code Playgroud)