别再往 text/plain 里塞错误提示

Stop sending me your errors

我偏爱 text/plain 格式的邮件,但最近收到的邮件却让我很恼火。发件人滥用 multipart/alternative 协议,在纯文本部分塞入“没有纯文本版本”的错误提示,而真正的 HTML 内容却藏在另一个部分。这完全违背了 RFC2046 的初衷,multipart/alternative 本意是提供相同信息的不同形式,而非用来报错。对于使用旧版客户端、不支持 HTML 或偏好纯文本的用户来说,这种设计不仅无助于解决问题,反而增加了困惑。如果系统无法生成有用的纯文本版本,不如直接省略,而不是用一条无意义的错误信息去冒犯用户。这不仅能让收件人更满意,还能避免邮件被 SpamAssassin 标记为垃圾邮件。

multipart/alternative 绝不是用来给我发送该死的错误信息的。
  1. cube00

    这不仅会让咱们这 10 个人开心,

    这条路确实走得孤独。

    我经常遇到这种情况,之所以注意到,是因为我的 Android 邮件客户端在通知栏里显示的是纯文本版本,结果屏幕上全是这种失败的 HTML 编码乱码。

    Salesforce Marketing Cloud 又立一功,让 HTML 版本里的编码漏洞漏到了纯文本版本里。

    这是一条 MIME 格式的多部分消息。

    --ySCSIjGKGV=_?:

    Content-Type: text/plain; charset="utf-8"

    Content-Transfer-Encoding: 8bit

    ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ ͏‌ [ 重复满屏 ]

  2. don-code

    作为一个 NoScript 用户,我在很多网站上也经常看到类似的内容。

    理想的情况是,网站在禁用 JS 后能优雅降级。鉴于 React 目前的状况,这基本上是个白日梦,但确实有些网站做到了。Github 就是其中一个做得很好的例子。

    次优的情况是,网站渲染出错,但我仍然能看到一些语义信息,这些信息可能正是我想要的,也可能不是。Gitlab 就是这种情况的例子。

    最糟糕的情况是网站直接白屏,什么有用的东西都加载不出来。Reddit 就是个例子,它只加载一个 loading 图片。不过我最头疼的还是 Stack Overflow 式的故障模式,它明确写着:“请启用 JavaScript 和 cookies 以继续”,而不是尝试展示任何内容,这跟本文作者描述的情况最相似。

  3. zahrevsky

    基本上,这就像是返回 200 OK,但正文里却写着“Error”?

同日更多故事

2026-08-05