我编写了一个需要发送电子邮件的 C++ 应用程序。
它通过调用来做到这一点
/usr/sbin/sendmail -f [sender] -t
然后将邮件标题和正文写入 sendmail 进程的标准输入。
一切正常 - 除了变音符号或其他非 ASCII 字符。 我怎样才能使它们正常工作?
我已经尝试设置
Content-Type: plain-text; charset=ISO-8859-1
作为邮件标题以及
Content-Type: plain-text; charset=UTF-8
没有任何改变。似乎这个 header 被忽略了。
最佳答案
电子邮件消息中除 ASCII 之外的任何内容通常应编码为 quoted-printable或 base64 .然后相应地设置 Content-Transfer-Encoding
和 Content-Type
header ,以便收件人知道如何将消息解码回非 ASCII 文本。
这是一个 bash 示例,说明了如何在命令行上完成此操作:
#!/bin/bash
message="Hellö ümläüts"
encoded=$(base64 <<< "$message")
/usr/sbin/sendmail -t <<< "From: sender@example.com
To: recipient@example.com
Subject: Dear friend
Content-Transfer-Encoding: base64
Content-Type: text/plain; charset="utf-8"
$encoded"
在对数据进行 base64 编码之前,您需要指定用于将字符串转换为二进制的任何字符编码。
此示例使用 utf-8,因为这是常见的平台默认设置,因此大多数 shell 在将字符串转换为二进制并将其传递到标准输入上的 base64
时会使用 utf-8。
关于utf-8 - 处理后缀 sendmail 中的变音符号(非 ASCII 字符)(在控制台上发送邮件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8235182/