【发布时间】:2022-12-06 01:14:02
【问题描述】:
我想从 Java 发送带有附件的电子邮件(通过 Spring 的 org.springframework.mail.javamail.JavaMailSender)。所以消息应该是多部分的。
编码的消息体看起来像
From: another@address
To: an@address
Subject: Unimportant message
Content-Type: multipart/mixed; boundary="----=_Part_0_1457006650.1670256299458"
...
------=_Part_0_1457006650.1670256299458
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
Content-Disposition: inline
Hello,
=E2=80=9ESomething here=E2=80=9C
------=_Part_0_1457006650.1670256299458
Content-Type: image/png; name=sample.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=sample.png
Content-Description: sample.png
iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAIAAAACUFjqAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9
...
FElEQVQY02P8z8WABzAxMIxKYwIATTQBHSBDi6AAAAAASUVORK5CYII=
------=_Part_0_1457006650.1670256299458--
Web Outlook 无法正确显示非 ASCII 字符,显示邮件正文中每个 UTF-8 字节的占位符。例如
我尝试了不同的 Transfer-Message-Encoding 值和不同的多部分布局(多个顶级部分,并作为部分嵌套在 root-multipart 中)但结果似乎相同 - 似乎 Web Outlook 确实考虑了传输编码但是无法将消息文本编码识别为 UTF-8。
这是 Outlook Web 的问题吗?或者消息应该有一些额外的元信息或不同的多部分布局?
我可能可以使用 HTML 编码,但消息是从模板生成的,因此,如果我理解正确,所有非 ASCII 符号都必须自动转换为实体。除了纯文本消息之外,我们不需要任何花哨的格式,因此该选项似乎过于复杂。
【问题讨论】:
-
最好张贴一个完全的例子
-
你到底想看什么?
-
可以测试的东西?
标签: java email encoding utf-8 smtp