将图像添加到System.Net.Mail消息 [英] Adding Image to System.Net.Mail Message

查看:137
本文介绍了将图像添加到System.Net.Mail消息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的解决方案中有一些存储在Resources.resx文件中的图像。我想在我的电子邮件中使用这些图片。我已将图像加载到变量中:

I have some images stored in the Resources.resx file in my solution. I would like to use these images in my email. I have loaded the image into a variable:

Bitmap myImage = new Bitmap(Resources.Image);

现在我想把它放在我用来创建HTML的AlternateView字符串的HTML中电子邮件。只需要一些帮助。

and now I want to put it in the HTML in the AlternateView string I am using to create the HTML email. Just need some help.

这是HTML字符串(部分):

Here is the HTML string(partial):

 body += "</HEAD><BODY><DIV style='height:100%; width:700px;'><div style='height:70px; width:700px; background-color:red;'><img src='" + myImage + "' width='104' height='27' alt='img' style='margin: 20px 0px 0px 20px;'/></div>

非常感谢任何帮助谢谢!

Any help would be greatly appreciated Thanks!

编辑:这是整个代码块。我想我已接近它,只是缺乏经验阻碍这里:)我尝试将它转换为像我所说的那样让我更远的字节。仍然没有渲染图片。这里有些东西我做得不对。非常感谢你们所有人帮助大家!这是代码(图片所需的HTML在字符串体的3行=代码中):

Here is the entire Code block. I think I am close to getting it, just inexperience getting in the way here :) I tried converting it into a Byte like suggested which got me farther. Still not rendering the image. There is something here I am not doing right. Thank you so much for all of you help everyone! Here is the code (the HTML I need for the image is in the 3 line of the string body = code):

 if (emailTo != null)
        {

            Bitmap myImage = new Bitmap(Resources.comcastHeader);
            ImageConverter ic = new ImageConverter();
            Byte[] ba = (Byte[])ic.ConvertTo(myImage, typeof(Byte[]));
            MemoryStream image1 = new MemoryStream(ba);

            LinkedResource headerImage = new LinkedResource(image1, "image/jpeg");
            headerImage.ContentId = "companyLogo";


            System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
            message.To.Add("" + emailTo + "");
            message.Subject = "" + customer + " Your order is being processed...";
            message.From = new System.Net.Mail.MailAddress("noreply@stormcopper.com");



            string body = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">";
            body += "<HTML><HEAD><META http-equiv=Content-Type content=\"text/html; charset=iso-8859-1\">";
            body += "</HEAD><BODY><DIV style='height:100%; width:700px;'><div style='height:70px; width:700px; background-color:red;'><img src=\"cid:companyLogo\" width='104' height='27' alt='img' style='margin: 20px 0px 0px 20px;'/></div><P>Hello " + customer + ",</P><P>Thank you for shopping at <a href='" + store + "'>" + store + "</A>.  Your order is being processed and will be shipped to you soon.  We would like to take this time to thank you for choosing Storm Copper Components, and we hope you are completely satisfied with your purchase. Please review your information and make sure all the information is correct.  If there are any errors in your order, please contact us immediately <A href='mailto:busbar@stormcopper.com'>here.</A></P>";               
            body += "<P><B>Here is your order information:</B></P>";
            body += "<H3>Contact Information</H3><TABLE><TR><TD><B>Name:</B> " + customer + "</TR></TD><TR><TD><B>Address:</B> " + street + " " + city + ", " + state + " " + zip + "</TR></TD><TR><TD><B>Email:</B> " + emailTo + "</TR></TD><TR><TD><B>Phone:</B> " + phone + "</TR></TD><TR><TD></TD></TR></TABLE>";
            body += "<H3>Products Ordered</H3><TABLE>" + productInformation + "</TABLE><BR /><BR />";
            body += "<H3>Pricing Information</H3><TABLE><TR><TD>Subtotal: $" + subTotal + "</TD></TR><TR><TD>Shipping: $" + shippingInfo + " </TD></TR><TR><TD>Tax: $" + taxInfo + "</TD></TR><TR><TD><B>Total:</B> $" + total + "</TD></TR><BR /></TABLE>";
            body += "<P>Thank you for shopping with us!</P><A href='stormcopper.com'>Storm Copper Components</A>";
            body += "<P><I>This is an Auto-Generated email sent by store copper.  Your email will not be sent to Storm Copper Components if you reply to this message.  If you need to change any information, or have any questions about your order, please contact us using the information provided in this email.</I></P></DIV></BODY></HTML>";



            ContentType mimeType = new System.Net.Mime.ContentType("text/html");

            AlternateView alternate = AlternateView.CreateAlternateViewFromString(body, mimeType);

            message.AlternateViews.Add(alternate);
            System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("########");
            smtp.Send(message);

        }


推荐答案

你需要将它们作为CID /链接资源添加到电子邮件中。

you need to add them in the email message as CID's/linked resources.

这里是我之前使用过的一些代码很好的代码。我希望这能给你一些指导:

here is some code I have used before which works nicely. I hope this gives you some guidance:

创建一个AlternativeView:

Create an AlternativeView:

AlternateView av = AlternateView.CreateAlternateViewFromString(body, null, isHTML ? System.Net.Mime.MediaTypeNames.Text.Html : System.Net.Mime.MediaTypeNames.Text.Plain)

创建链接资源:

LinkedResource logo = new LinkedResource("SomeRandomValue", System.Net.Mime.MediaTypeNames.Image.Jpeg);
logo.ContentId = currentLinkedResource.Key;
logo.ContentType = new System.Net.Mime.ContentType("image/jpg");

//将其添加到备用视图

// add it to the alternative view

av.LinkedResources.Add(logo);

//最后,在邮件中添加备用视图:

// finally, add the alternative view to the message:

msg.AlternativeViews.Add(av);

这里有一些文档可以帮助您了解AlternativeView和LinkedResources是什么以及它是如何工作的:

here is some documentation to help you with what the AlternativeView and LinkedResources are and how it works:

http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews(v = vs.110).aspx
http:// msdn .microsoft.com / zh-CN / library / system.net.mail.linkedresource(v = vs.110).aspx
http://msdn.microsoft.com/en-us/library/ms144669(v = vs.110).aspx <在HTML本身中,您需要执行以下操作:

http://msdn.microsoft.com/en-us/library/system.net.mail.mailmessage.alternateviews(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/system.net.mail.linkedresource(v=vs.110).aspx http://msdn.microsoft.com/en-us/library/ms144669(v=vs.110).aspx

in the HTML itself, you need to do something like the following:

< img style = \width:157px;身高:60px; \alt = \blah blah \title = \我的头衔在这里\src = \cid:{0} \/>;

注意CID后跟字符串格式{0} - 然后我用它来替换它随机价值。

notice the CID followed by a string format {0} - I then use this to replace it with a random value.

更新

返回并评论海报评论......这是海报的工作解决方案:

To go back and comment on the posters comments... here is the working solution for the poster:

string body = "blah blah blah... body goes here with the image tag: <img src=\"cid:companyLogo\" width="104" height="27" />";

byte[] reader = File.ReadAllBytes("E:\\TestImage.jpg");
MemoryStream image1 = new MemoryStream(reader);
AlternateView av = AlternateView.CreateAlternateViewFromString(body, null, System.Net.Mime.MediaTypeNames.Text.Html);

LinkedResource headerImage = new LinkedResource(image1, System.Net.Mime.MediaTypeNames.Image.Jpeg);
headerImage.ContentId = "companyLogo";
headerImage.ContentType = new ContentType("image/jpg");
av.LinkedResources.Add(headerImage);


System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.AlternateViews.Add(av);
message.To.Add(emailTo);
message.Subject = " Your order is being processed...";
message.From = new System.Net.Mail.MailAddress("xxx@example.com");


ContentType mimeType = new System.Net.Mime.ContentType("text/html");
AlternateView alternate = AlternateView.CreateAlternateViewFromString(body, mimeType);
message.AlternateViews.Add(alternate);

//然后发送消息!

这篇关于将图像添加到System.Net.Mail消息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆