简体   繁体   中英

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("pratik.soni@1rivet.com")
                  .To("pratik.soni10@gmail.com")
                  .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 ?

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("John.Doe@alfki.com");
    mail.To.Add("Jane.Doe@alfki.com");
    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?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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