0

I am a email web services which allows html content and one method that allows

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.

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

Update :

I tried converting image to base64 but didn't work that.. here is my html with base64

<htm><body>  <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAZCAYAAABtnU33AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAHCSURBVHja5NgvbBNRGADwH0clAoJDkZBDgEBhEFzQhIBEEhwWMUGKGblkwayG1ZHKVrGF1JFAKk6sglZsYmEJqcCRTmAmliH2ujRho39WWHv3JU9c8/W7/vou7973Lrz6slPGG8WI1xG2FSe2I3TRLwC2j26EXWQFAGdpEu9G4aJVAHALBuDP2Msxdi8Yj8FtNHMMbqZJ3B4Gw8ccg49tw+B1bOQQuxFsf4D3UcdBjrAHqKdJvH8SWADXcgSupUlcH/4gOiHpPbZygN0KFqPAGao5AFfTJM7GAcMaKguMrQSDccGHWEVjAbENrKZJfDgJGHpYWbANSRMraRL3TkuIRhToYHlB0E0sp0nc+VtSNEahTZTn/PFuoJwm8eaoxGjMgh0szelCVsHSqJkdRGmCwj28xDe8wO05eM9WsXbaAnVW8GD1foeveI5nuHgO28Va2FRkaRJP9OXSlDfNwviEp3j8HxuBehhTRemMP6COD3iCR3iIy/+geW+GFm89NDnOCzzoshph3MUD3Mc9XJmyZj88Qa1wUtGe1b9XmvFstMN4ixu4g1u4ieu4hqu4FPJ/4Sd+4Dt2HB0bdx0dLs48fg8Ax9hvy8gn+qUAAAAASUVORK5CYII=" /></body></html>
Mahajan344
  • 2,492
  • 6
  • 39
  • 90

2 Answers2

0

You need to try HtmlAgilityPack and image Pass as base 64 string

                #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);
Sunny Jangid
  • 578
  • 4
  • 19
0

Convert the image to Base64 string, set it as image source as followed.

    <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?

MwBakker
  • 498
  • 5
  • 18
  • I tried converting image to base64 but still not shwoing in email – Mahajan344 Nov 15 '17 at 11:21
  • Have you tried putting the base64 output in an online converter to see if the output string is valid? – MwBakker Nov 15 '17 at 11:52
  • Is there an error being formed in the instance of the img src = ' ' are you sure the src != null while entering that code line? – MwBakker Nov 15 '17 at 12:00
  • I have updated my question with base64 srting.. you can see entire html now – Mahajan344 Nov 15 '17 at 12:03
  • Is there any live page or such present in which you can inspect the html elements? If so, try seeking for the certain ... /> and check if all is at place in the 'live' area. – MwBakker Nov 15 '17 at 12:06