You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Mailkit发送邮件时内嵌logo被识别为附件问题求解

问题根因定位

  • 占位符大小写不匹配:代码中替换的模板参数是{LogoUrl}(首字母L大写),但邮件模板里写的是{logourl}(全小写),导致参数替换完全失效,邮件正文里的图片地址没有被替换成正确的cid:前缀地址,客户端找不到对应内嵌资源,就会把图片识别为附件。
  • 使用了ASP.NET服务端控件:你是直接读取aspx文件的文本内容,没有经过ASP.NET服务端渲染流程,最终邮件正文里会保留<asp:Image>非标准HTML标签,绝大多数邮件客户端无法识别这类标签,也会导致图片加载失败。
  • 存在冗余无效标签:模板里的<form>、<asp:ScriptManager>标签属于ASP.NET服务端专用标签,在邮件场景下没有任何作用,还可能导致部分客户端解析HTML异常。
  • 编码设置不明确:ContentTransferEncoding设置为Default可能导致不同邮件客户端的编码解析不一致,建议显式设置为Base64保证兼容性。

修改方案

1. 调整邮件模板

清理无效标签,替换服务端控件为标准HTML标签,统一占位符大小写:

<body>
    <div class="row">
        <div style="background: #40B800; width: 100%; height: 10px;">
        </div>
    </div>
    <div id="logoDiv" style="border-bottom: solid 4px #919191; padding-bottom: 2px">
        <img id="logo" src="{LogoUrl}" alt="品牌Logo"/>
    </div>
    <br />
    Hello <em>{CustomerEmail} </em>
    <br />
    <br />
    Your Order was placed successfully with OrderID:
    <em>{OrderID} </em> 
    This Order has been forwarded  for payment processing.  Your Order shall be processed and shipped when this process completes.
    <br />
    <br />
    Yours faithfully
    <br />
    For: Xxx.
    <div class="row">
        <div style="background-color: #eaeaea; border-top: solid 2px #919191">
        </div>
    </div>
</body>

2. 调整代码编码配置

修改图片的传输编码设置,提升兼容性:

' 把原代码中的
image.ContentTransferEncoding = ContentEncoding.Default
' 修改为
image.ContentTransferEncoding = ContentEncoding.Base64

其余代码逻辑无需调整,修改完成后重新发送邮件,logo就会正常内嵌显示在正文内,不会被识别为附件。

内容的提问来源于stack exchange,提问作者ObulorN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 02:45:01