我在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-8 8BITMIME在这种情况下,我怎么能改变它?我试着添加-utf8,但是它不起作用。
使用mailx和后缀的
我已经安装了mailutils软件包并配置了后缀。向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
我得到和错误是因为UTF8来自最聪明的:
status=bounced (SMTPUTF8 is required, but was not offered by host <smarthost>
我已经将参数添加到后缀以避免错误smtputf8_enable = no
如果我执行最后的邮件命令发送电子邮件,电子邮件是发送的,但特殊字符是错误的打印在微软电子邮件基础上,但在Gmail是正确的。
作为解决办法,我已经创建了一个包含特殊字符的主体失败。我以下列方式发送:
mailx -s "Some text with special characters è à" -a "From: Sender <norepley@sender.com>" some_email@example.com < body.txt
这封电子邮件是以正确的方式显示的特殊字符在所有电子邮件帐户,但主题仍然是错误的微软为基础的帐户。
一些线索,如何迫使主题也以正确的方式打印微软电子邮件的基础上?
提前感谢
发布于 2021-03-03 09:23:04
这里有很多要讨论的:
SMTPUTF8
扩展,否则不能在头字段中使用UTF-8。8BITMIME
扩展只表示8位内容(例如UTF-8,而ASCII仅为7位内容)保存在正文中。作为客户端,一旦服务器在响应MAIL FROM:<example@example.com> BODY=8BITMIME
命令时表示支持8BITMIME
,就会使用EHLO
发送8位主体。8BITMIME
,那么您应该将接收邮件客户端的主体标记为MIME-Version: 1.0
、Content-Transfer-Encoding: 8bit
和Content-Type: text/plain; charset=utf-8
。如果不是每个人都支持8BITMIME
,则必须使用Content-Transfer-Encoding
。SMTPUTF8
不受广泛支持,根据RFC 2047,您必须使用编码-字编码对非ASCII进行编码。例如,主题¡Buenos días!
可以编码为=?ISO-8859-1?Q?=A1Buenos_d=EDas!?=
。MAIL FROM
和RCPT TO
命令中地址周围的尖括号。您的示例必须是MAIL FROM:<example@example.com>
和RCPT TO:<emailto@emailto.com>
。STARTTLS
之后,客户端和服务器被重置到它们的初始状态。作为客户端,您应该发送另一个EHLO
命令,服务器可以使用与TLS握手之前不同的扩展列表来响应该命令。PIPELINING
,即使它们支持,您也应该在发送任何命令之前等待初始的问候,并在继续之前等待服务器对EHLO
和DATA
命令的响应。虽然您所做的可以工作,但不遵守RFC标准可以用于过滤垃圾邮件。Date
是一个强制性的头字段。https://stackoverflow.com/questions/66447163
复制相似问题