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

Shell脚本发送含text/plain与text/html的多部分邮件仅显示HTML部分求助

问题原因分析
  • 客户端默认渲染规则:multipart/alternative类型的MIME内容默认按「优先级从低到高」排列各个部分,标准要求优先展示最后出现的格式(也就是你代码里的HTML部分),只有当客户端不支持HTML、或用户手动设置优先展示纯文本时才会显示纯文本内容,这是邮件协议的标准行为,并非纯文本部分发送失败。你删除HTML部分后客户端没有可选的更高优先级格式,自然就展示纯文本,也印证了这一点。
  • MIME头格式不规范:你代码中text/plain、text/html的Content-Type行末尾带有多余分号,且未指定字符集,同时额外加了非必要的Content-ID字段,部分严格的MIME解析器会识别异常,导致跳过纯文本部分的解析。
  • 内容格式混淆:纯文本部分的**TEXT email**是Markdown语法,在纯文本上下文不会被渲染,你看到的会是带星号的原始内容,容易误以为是内容解析错误。
解决方案
  1. 修正multipart/alternative部分的MIME头,删除多余的Content-ID、补充字符集、去掉末尾多余分号,修改后的对应部分代码如下:
--AlternativeBoundaryString
Content-Type: text/plain; charset=utf-8

TEXT email

--AlternativeBoundaryString
Content-Type: text/html; charset=utf-8

<html>
  <head>
</head>
  <body>
    <h1>Result</h1>
      <p>HTML email</p>
      <p><img border=0 width=1024 height=503 style='width:10.6666in;height:5.2416in' id=id.obrazek1 src="cid:id.obrazek1" alt="Opis: cid:id.obrazek1"></p>
  </body>
</html>

--AlternativeBoundaryString--
  1. 验证纯文本是否发送成功:不要直接看客户端默认展示内容,打开收件箱的「查看原始邮件」「查看邮件源码」功能,搜索纯文本内容,只要能在源码中检索到就说明发送正常。
  2. 可选优化:你的内嵌图片是png格式,当前ContentType写的是image/jpeg,建议修改为Content-Type: image/png;避免部分客户端解析图片异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:45:03