【问题标题】:Images and styles are not appearing in HTML email图像和样式未出现在 HTML 电子邮件中
【发布时间】:2016-05-23 18:48:38
【问题描述】:

我的图像和样式未出现在电子邮件中(在 Outlook 2016 中)。我就是这样做的:

c#:

var body = File.ReadAllText("c:/emailtemplate.html");
MailMessage msg = new MailMessage("noreply@mycompany.com", "you@outlook.com", "test", body);
msg.IsBodyHtml = true;
var client = new SmtpClient(SmtpHost);
client.Send(msg);

电子邮件模板.html

<div style="border:solid 1px #000;padding:20px;">
   <img src="logo.png" style="width:250px">
   <p style="color:red;font-weight:bold">Thanks for signing up!</p>
</div>

logo.png 与 emailtemplate.html 位于同一位置

知道如何包含图像并将样式应用到我的电子邮件中吗?

【问题讨论】:

    标签: c# html css .net


    【解决方案1】:

    使用图像的完整 URL,而不是其相对 URL。

    类似:http://www.example.com/logo.gif

    【讨论】:

    • 添加完整的 URL 可以解决图像问题,但我还必须确保电子邮件客户端可以访问该 URL。 CSS仍然有问题。我的一些样式(如颜色)正在应用,但大多数都没有(填充等)
    【解决方案2】:

    您的 img src 至少应该是绝对的,才有机会被看到。
    为保证 img 可见,将其转换为 base64 字符串并创建 LinkedResource
    同时创建AlternateView 并将其附加到MailMessage 实例。所有这些功能都在System.Net.Mail 命名空间中。下面是一个 VB.NET 中的示例来帮助您。

    <div style="border:solid 1px #000;padding:20px;">
       <img src="data:image/jpeg;base64,####" style="width:250px">
       <p style="color:red;font-weight:bold">Thanks for signing up!</p>
    </div>
    
    Dim lnkRcs As New List(Of Net.Mail.LinkedResource)
    Dim match As System.Text.RegularExpressions.Match = System.Text.RegularExpressions.Regex.Match(msgBody, "src=""(?<src>data:(?<mime>.+?);base64,(?<data>.+?))""")
    Dim a As Integer = 0
    While match.Success
        Dim stm = Convert.FromBase64String(match.Groups("data").Value)
        Dim rc As New Net.Mail.LinkedResource(New System.IO.MemoryStream(stm), match.Groups("mime").Value)
        rc.ContentId = "rc" & a
        rc.TransferEncoding = Net.Mime.TransferEncoding.Base64
        msgBody = msgBody.Replace(match.Groups("src").Value, "cid:" & rc.ContentId)
        lnkRcs.Add(rc)
        a += 1
        match = match.NextMatch()
    End While
    Dim altHtml As Net.Mail.AlternateView = Net.Mail.AlternateView.CreateAlternateViewFromString(msgBody, Nothing, "text/html")
    For Each rc As Net.Mail.LinkedResource In lnkRcs
        altHtml.LinkedResources.Add(rc)
    Next
    msg.AlternateViews.Add(altHtml)
    

    【讨论】:

    • 谢谢。我会试一试。我确实使用客户端可访问的完整图像路径使图像正常工作。
    • 完整路径允许但不保证。收件人必须允许/显示图像。我遇到了所有这些问题。这就是我使用此代码的原因。
    猜你喜欢
    • 2011-01-27
    • 2011-06-09
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多