使用 C# 和 Asp.Net 在邮件正文中嵌入图像

本文关键字:正文 图像 Asp Net 使用 | 更新日期: 2023-09-27 18:34:28

我试图将图像嵌入到Outlook电子邮件中。基本上,我想每天为生日祝福创建一个窗口服务。服务将向所有员工发送生日祝福。对于每天,图像模板都会有所不同,并且每天都会有背景色。

我试图使用此链接中的代码片段,但面临两个问题:

  1. 当我将图像添加到HTML正文时,邮件进入带有红叉("X"(标记的前景。我已经验证了路径,没有问题。
  2. 当我向 HTML 正文添加任何其他内容时,图像将被替换为该图像。不知道我哪里出错了。

正在附加我迄今为止尝试的 C# 代码:

private void SendHtmlFormattedEmail(string recepientEmail, string subject, string body)
    {
        string path = Server.MapPath("~/Images/TestLogo.png");
        Configuration config = System.Web.Configuration.WebConfigurationManager
        .OpenWebConfiguration("~/");
        var settings = (System.Net.Configuration.MailSettingsSectionGroup)
        config.GetSectionGroup("system.net/mailSettings");
        var smtp = settings.Smtp;
        System.Net.Configuration.SmtpNetworkElement network = smtp.Network;

        var outlookApp = new Microsoft.Office.Interop.Outlook.Application();
        var mailitem = (MailItem)outlookApp.CreateItem(OlItemType.olMailItem);
        mailitem.To = network.TargetName;
        mailitem.Subject = subject;
        Microsoft.Office.Interop.Outlook.Attachment attachment = mailitem.Attachments.Add(path, OlAttachmentType.olEmbeddeditem, null, "Test Image");
        string imageCid = "TestLogo.png@123";
        attachment.PropertyAccessor.SetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E", imageCid);
        mailitem.BodyFormat = OlBodyFormat.olFormatRichText;
        mailitem.HTMLBody = String.Format("<body bgcolor='#E6E6FA'>Dear TestMan,<img src=@cid:{0}'"></body>", imageCid);
        //mailitem.Body = body;
        mailitem.Display(false);
        mailitem.Send();
    }

使用 C# 和 Asp.Net 在邮件正文中嵌入图像

  1. 将您的图像转换为 base64。无论是使用 https://www.base64-image.de/这样的网站/工具,还是以编程方式 http://www.c-sharpcorner.com/blogs/convert-an-image-to-base64-string-and-base64-string-to-image

  2. 嵌入它:<img src="data:image/jpeg;base64,IMAGEDATA" />

    编辑数据类型以匹配图像的类型,并将"IMAGEDATA"替换为转换为 base 64 字符串的图像字节。

作为参考,一个完整的工作示例:

    public void SendMail()
    {
        LinkedResource logo = new LinkedResource(
            "images''image005.png",                 //Path of file
            "image/png");                           //Mime type: Important!
        logo.ContentId = "logo";                    //ID for reference
        //Actual HTML content of the body in an 'AlternateView' object.
        AlternateView vw = AlternateView.CreateAlternateViewFromString(
            "Hello, this is <b>HTML</b> mail with embedded image: <img src='"cid:logo'" />", 
            null, 
            MediaTypeNames.Text.Html);              //Mime type: again important!
        vw.LinkedResources.Add(logo);
        var msg = new MailMessage() { IsBodyHtml = true };
        msg.AlternateViews.Add(vw);
        msg.From = new MailAddress("sender@domain.com");
        msg.To.Add(new MailAddress("reciever@domain.com"));
        msg.Subject = "HTML Mail!";
        using (var client = new SmtpClient("localhost", 25)) 
            client.Send(msg);
    }