简体   繁体   English

通过网络服务通过电子邮件发送图像

[英]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. 我知道我可以通过使用AlternateViewLinkedResources使用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: 代码示例来自:

How to display Base64 images in HTML? 如何以HTML显示Base64图像?

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM