【发布时间】:2021-03-02 21:09:12
【问题描述】:
我在 Linux 中有一个用于发送电子邮件的 bash 脚本。我通过 openssl 和 s_client 使用 SMTP。
它是多语言的,所以有时会有特殊字符(è、à...)在正文中正确显示,但在任何基于 Microsoft(Outlook、Hotmail...)的主题中都没有。
使用 openssl
我使用以下命令:
openssl s_client -crlf -quiet -starttls smtp -connect <smarhost.server>:<port> < <configuration_and_body_file>
<configuration_and_body_file> 是一个纯文本文件,其中包含以下连接协议和电子邮件数据
MAIL FROM: example@example.com
RCPT TO: emailto@emailto.com
DATA
From: Sender <example@example.com>
To: emailto@emailto.com
Subject: accès à ...
Some text with special characters as (è, à, ë...)
.
QUIT
如果我将它发送到 Gmail 或任何不同于 Microsoft(Outloik、Hotmail)的邮件,则主题和正文是正确的。但是当收款人使用 Hotmail 或 Outlook 时,特殊字符被错误解码为Ã 或其他字符。
命令的输出如下:
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign GCC R3 DV TLS CA 2020
verify return:1
depth=0 CN = *.<foodomain>
verify return:1
250 DSN
250-gefwml03e.<foodomain>
250-PIPELINING
250-SIZE 31457280
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
250 2.1.0 Ok
250 2.1.5 Ok
354 End data with <CR><LF>.<CR><LF>
250 2.0.0 Ok: queued as 27C77671AE7_3E83FBF
221 2.0.0 Bye
在这种情况下可能是 250-8BITMIME 我该如何更改它?我尝试添加 -utf8 但它不起作用。
使用 mailx 和 postfix
我已经安装了 mailutils 包并配置了 postfix。将智能主机添加到relayhost 并设置inet_interfaces = loopback-only
我已使用以下命令发送电子邮件:
echo "Some text with special characters è à" | mailx -s "From: Some text with special characters è à" -a "Sender <norepley@sender.com>" some_email@example.com
由于来自 smarthost 的 UTF8,我得到错误:
status=bounced (SMTPUTF8 is required, but was not offered by host <smarthost>
我已将参数添加到后缀以避免该错误smtputf8_enable = no
如果我执行最后一个邮件命令来发送电子邮件,则会发送电子邮件,但特殊字符在基于 Microsoft 的电子邮件中打印错误,但在 Gmail 中是正确的。
作为解决方法,我创建了一个包含特殊字符的正文失败。我发送为:
mailx -s "Some text with special characters è à" -a "From: Sender <norepley@sender.com>" some_email@example.com < body.txt
此电子邮件在所有电子邮件帐户中以正确的方式显示为正文的特殊字符,但在基于 Microsoft 的帐户中主题仍然错误。
关于如何强制主题也以正确的方式打印为基于 Microsoft 电子邮件的一些线索?
提前致谢
【问题讨论】:
标签: utf-8 outlook openssl smtp mailx