[英]Send image in email through web service
I am a email web services which allows html content and one method that allows 我是一个电子邮件Web服务,它允许html内容和一种允许
byte[][] lstAttachment, string attachmentName, string[] contentType
I want to send email with inline image. 我想发送带有嵌入式图像的电子邮件。 I know I can send using system.net.mail by using
AlternateView
and LinkedResources
but I can't use them because I have custom web service to send email. 我知道我可以通过使用
AlternateView
和LinkedResources
使用system.net.mail进行发送,但是我不能使用它们,因为我具有自定义的Web服务来发送电子邮件。
I tried putting absolute address like : 我试图把绝对地址,像:
body = "<htm><body> <img src='abc.org/img-logo.png'> </body></html>";
but it didn't work either. 但它也不起作用。
So how can I embed image in email without using AlternateView
or without using system.net
for sending email 因此,如何在不使用
AlternateView
或不使用system.net
来发送电子邮件的情况下将图像嵌入电子邮件中
Update : 更新:
I tried converting image to base64 but didn't work that.. here is my html with base64 我尝试将图像转换为base64,但没有成功..这是我的base64 html文件
<htm><body> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAZCAYAAABtnU33AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAHCSURBVHja5NgvbBNRGADwH0clAoJDkZBDgEBhEFzQhIBEEhwWMUGKGblkwayG1ZHKVrGF1JFAKk6sglZsYmEJqcCRTmAmliH2ujRho39WWHv3JU9c8/W7/vou7973Lrz6slPGG8WI1xG2FSe2I3TRLwC2j26EXWQFAGdpEu9G4aJVAHALBuDP2Msxdi8Yj8FtNHMMbqZJ3B4Gw8ccg49tw+B1bOQQuxFsf4D3UcdBjrAHqKdJvH8SWADXcgSupUlcH/4gOiHpPbZygN0KFqPAGao5AFfTJM7GAcMaKguMrQSDccGHWEVjAbENrKZJfDgJGHpYWbANSRMraRL3TkuIRhToYHlB0E0sp0nc+VtSNEahTZTn/PFuoJwm8eaoxGjMgh0szelCVsHSqJkdRGmCwj28xDe8wO05eM9WsXbaAnVW8GD1foeveI5nuHgO28Va2FRkaRJP9OXSlDfNwviEp3j8HxuBehhTRemMP6COD3iCR3iIy/+geW+GFm89NDnOCzzoshph3MUD3Mc9XJmyZj88Qa1wUtGe1b9XmvFstMN4ixu4g1u4ieu4hqu4FPJ/4Sd+4Dt2HB0bdx0dLs48fg8Ax9hvy8gn+qUAAAAASUVORK5CYII=" /></body></html>
You need to try HtmlAgilityPack and image Pass as base 64 string 您需要尝试HtmlAgilityPack和image Pass作为base 64字符串
#region Create mail body using LinkedResource
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(mailBody);
var i = 1;
AlternateView htmlview = default(AlternateView);
var imageResourceList = new List<LinkedResource>();
if (doc.DocumentNode.SelectNodes("//img") != null)
{
foreach (HtmlNode img in doc.DocumentNode.SelectNodes("//img"))
{
var base64String = img.GetAttributeValue("src", null);
base64String = base64String.Replace("data:image/png;base64,", "");
var bytes = Convert.FromBase64String(base64String);
var stream = new MemoryStream(bytes);
LinkedResource imageResourceEs = new LinkedResource(stream, MediaTypeNames.Image.Jpeg);
imageResourceEs.ContentId = "img" + i;
imageResourceEs.TransferEncoding = System.Net.Mime.TransferEncoding.Base64;
imageResourceList.Add(imageResourceEs);
img.SetAttributeValue("src", "cid:img" + i);
i++;
}
}
htmlview = AlternateView.CreateAlternateViewFromString(doc.DocumentNode.OuterHtml, null, "text/html");
foreach (var imgSource in imageResourceList)
{
htmlview.LinkedResources.Add(imgSource);
}
#endregion
//split email address
var newIds = emailIds.Split(',');
//create new MailMessage object
var mail = new MailMessage { From = new MailAddress(emailTemplate.FromEmail, emailTemplate.FromText) };
//set email address of reciver to mail message
foreach (var email in newIds)
{
mail.To.Add(email);
}
//set mail subject
mail.Subject = subject;
mail.IsBodyHtml = true;
mail.BodyEncoding = System.Text.Encoding.UTF8;
//set mail body
mail.Body = doc.DocumentNode.OuterHtml;
//Add AlternateViews
mail.AlternateViews.Add(htmlview);
//send mail
SendEmail(mail);
Convert the image to Base64 string, set it as image source as followed. 将图像转换为Base64字符串,如下所示将其设置为图像源。
<div>
<p>Taken from wikpedia</p>
<img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
</div>
Code example coming from: 代码示例来自:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.