Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unable to send embedded image in email using FluentEmail

I'm using FluentEmail in ASP.NET core 2.0 class library which will be sending the Email notification.

Below is the sample code I have tried till now:

using FluentEmail.Core;
using FluentEmail.Razor;
using FluentEmail.Smtp;
using System;
using System.IO;
using System.Net.Mail;
using System.Net.Mime;

namespace FluentEmail
{
    public class EmailNotification : IEmailNotification
    {
        public bool SendEmailNotification()
        {
            try
            {
                //Setup Default sender befault sending the email.
                SmtpClient smtpClient = new SmtpClient
                {
                   Host = "smtp.office365.com",
                   Port = 587,
                   EnableSsl = true,
                   Credentials = new System.Net.NetworkCredential("username", "Password")
                };
                Email.DefaultSender = new SmtpSender(smtpClient);

                Email.DefaultRenderer = new RazorRenderer();

                string imagePath = @"C:\Users\pratik.soni\Downloads\FluentLogo.png";

                Stream stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read);
                stream.Flush();
                stream.Seek(0, SeekOrigin.Begin);

                var attachment = new Core.Models.Attachment()
                {
                    Data = stream,
                    ContentType = "image/png",
                    Filename = "FluentLogo.png",
                    IsInline = true
                };

                var email = Email
                  .From("[email protected]")
                  .To("[email protected]")
                  .Subject("Test")
                  .Body("<html>Inline image here: <img src=\"cid:FluentLogo.png\">" +
                    "<p>You should see an image without an attachment, or without a download prompt, dependig on the email client.</p></html>", true);

                email.Attach(attachment);
                email.Send();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }

        }
    }
}

My HTML file is as follow:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>FluentEmail - Test with template and attachment</title>
</head>
<body style="margin: 0; padding: 0; background-color: #e5e5e5;" marginheight="0" topmargin="0" marginwidth="0" leftmargin="0">
<!--100% body table-->
<table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td bgcolor="#d8e7ea" style="background-color: #e5e5e5;">
            <!--intro-->
            <table width="620" border="0" align="center" cellpadding="0" cellspacing="0">
                <tr>
                    <td valign="middle" width="11" height="100"></td>
                    <td valign="middle" height="100">
                        <!--break-->
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td height="25"></td>
                            </tr>
                        </table>
                        <!--/break-->
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td width="59%" height="100">
                                    <table width="280" border="0" cellspacing="0" cellpadding="20">
                                        <tr>
                                            <td bgcolor="#333333">
                                                <h1 style="font-family: Arial, Helvetica, sans-serif; font-size: 42px; margin: 0; padding: 0; color: #fff;">Typographic</h1>
                                                <p style="text-transform: uppercase; font-size: 14px;  color: #fff; margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif;">
                                                    <currentdayname>
                                                    <currentday>
                                                    <currentmonthname>
                                                    <currentyear>
                                                </p>
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                                <td width="41%" height="100" valign="top">
                                    <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                        <tr>
                                            <td valign="bottom" height="70">
                                                <p style="font-family: Arial, Helvetica, sans-serif; font-size: 14px; color: #333; text-transform: uppercase; margin: 0; padding: 0;"> Email not looking beautiful?<br>
                                                    <webversion style="text-decoration: none; color: #cc0000">View it in your browser</webversion>
                                                </p>
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                        <!--break-->
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td height="25"></td>
                            </tr>
                        </table>
                        <!--/break-->
                    </td>
                </tr>
            </table>
            <!--/intro-->
            <!--content section-->
            <table width="620" border="0" align="center" cellpadding="0" cellspacing="0">
                <tr>
                    <td height="82" width="11" valign="middle"></td>
                    <td height="82" bgcolor="#FFFFFF" valign="middle">
                        <table width="100%" border="0" cellspacing="0" cellpadding="0">
                            <tr>
                                <td valign="middle" height="37" bgcolor="#fef041">
                                    <table width="100%" border="0" cellspacing="0" cellpadding="0">
                                        <tr>
                                            <td bgcolor="#ffffff" width="25" height="37"></td>
                                            <td width="15" height="37"></td>
                                            <td>
                                                <h2 style="color: #333333 !important; font-size: 21px; font-family: Arial, Helvetica, sans-serif; margin: 0; padding: 0; text-shadow: 1px 1px 1px #fff;"> @Model.Title</h2>
                                            </td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
                <tr>
                    <td valign="top"></td>
                    <td bgcolor="#FFFFFF" valign="top">
                        <table width="560" border="0" align="center" cellpadding="0" cellspacing="0">
                            <tr>
                                <td valign="top">
                                    <p style="font-size: 14px; color: #333333; margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif;"> Dear @Model.Name, You are totally @Model.Compliment. </p>
                                    <br>
                                    <table bgcolor="#000000" width="540" border="0" cellspacing="10" cellpadding="0">
                                        <tr>
											<td>
												<img src=\"cid:@Model.ImgSrc\">
											</td>
										</tr>
										<tr>
                                            <td width="540" height="158"><img style="margin: 0; padding: 0; display: block;" border="0" src="C:\Users\pratik.soni\Downloads\2016-fluent-logo-design-digital-marketing-20nine-4.png" width="540" height="158" alt="img1"></td>
                                        </tr>
                                    </table>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>
<!--/100% body table-->
</body>
</html>

I have also tried with only passing image path to the imgsrc in html but that is also not working.

Please let me know what I'm missing in here.

Also, is there any such package like FluentEmail which can provide such all facility with ASP.NET Core 2.0?

like image 967
Pratik Soni Avatar asked May 17 '18 06:05

Pratik Soni


People also ask

How do you send a picture in the body of an email?

Select Insert > Pictures. Browse your computer or online file locations for the picture you want to insert. Select the picture, then select Insert.

How do I insert an image into the body of an email in asp net?

Create a new website and add a page to it. Add 3 textboxes into the page for receiver Email-ID, subject of Email, and message of Email and a button for sending mail. Write some code on the ". cs" file to send the mail with some Text and an Image at a "button click" event.


1 Answers

You have to use a LinkedResource; have a look at this

using (LinkedResource image = new LinkedResource(@"c:\assets\image.jpg", "image/jpeg") { ContentId = "myimage" })
using (MailMessage mail = new MailMessage())
using (SmtpClient smtpClient = new SmtpClient())
{
    smtpClient.Host = "smtp.alfki.com";

    String body = @"
    <html>
        <head></head>
        <body>    
        <img src=""cid:myimage"" />      
        </body>
    </html>
    ";  

    AlternateView view = AlternateView.CreateAlternateViewFromString(body, null, "text/html");
    view.LinkedResources.Add(image);

    mail.IsBodyHtml = true;
    mail.AlternateViews.Add(view);
    mail.From = new MailAddress("[email protected]");
    mail.To.Add("[email protected]");
    mail.Subject = "An email with an inline image";

    smtpClient.Send(mail);
}

Edit:

It works in .NET Core/Standard.

I can not speak for FluentMail; maybe you can do without?

like image 109
pfx Avatar answered Oct 21 '22 17:10

pfx