首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过openssl和s_client发送电子邮件的主题中的错误

通过openssl和s_client发送电子邮件的主题中的错误
EN

Stack Overflow用户
提问于 2021-03-02 21:09:12
回答 1查看 1.4K关注 0票数 0

我在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>是一个纯文本文件,它包含连接协议和电子邮件的数据,如下所示

代码语言:javascript
运行
复制
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时,特殊字符被错误地解码为Ã或其他字符。

该命令的输出如下:

代码语言:javascript
运行
复制
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

这封电子邮件是以正确的方式显示的特殊字符在所有电子邮件帐户,但主题仍然是错误的微软为基础的帐户。

一些线索,如何迫使主题也以正确的方式打印微软电子邮件的基础上?

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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.0Content-Transfer-Encoding: 8bitContent-Type: text/plain; charset=utf-8。如果不是每个人都支持8BITMIME,则必须使用Content-Transfer-Encoding
  • 由于SMTPUTF8不受广泛支持,根据RFC 2047,您必须使用编码-字编码对非ASCII进行编码。例如,主题¡Buenos días!可以编码为=?ISO-8859-1?Q?=A1Buenos_d=EDas!?=
  • RFC 5321需要MAIL FROMRCPT TO命令中地址周围的尖括号。您的示例必须是MAIL FROM:<example@example.com>RCPT TO:<emailto@emailto.com>
  • STARTTLS之后,客户端和服务器被重置到它们的初始状态。作为客户端,您应该发送另一个EHLO命令,服务器可以使用与TLS握手之前不同的扩展列表来响应该命令。
  • 并不是所有的服务器都支持PIPELINING,即使它们支持,您也应该在发送任何命令之前等待初始的问候,并在继续之前等待服务器对EHLODATA命令的响应。虽然您所做的可以工作,但不遵守RFC标准可以用于过滤垃圾邮件
  • 根据RFC 5322的说法,Date是一个强制性的头字段。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66447163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档