Utf 8 通过openssl和s_客户端发送电子邮件SMPT的带有特殊字符的主题出错

Utf 8 通过openssl和s_客户端发送电子邮件SMPT的带有特殊字符的主题出错,utf-8,outlook,openssl,smtp,mailx,Utf 8,Outlook,Openssl,Smtp,Mailx,我有一个Linux中的bash脚本用于发送电子邮件。我正在使用openssl和s_客户端的SMTP 它是多语言的,所以有时会有一些特殊字符(è,è…)正确地显示在正文中,但不会显示在任何基于Microsoft的主题中(Outlook、Hotmail…) 使用openssl 我使用以下命令: openssl s_客户端-crlf-quiet-starttls smtp-connect: 是一个纯文本文件,其中包含连接协议和电子邮件数据,如下所示 MAIL FROM: example@example

我有一个Linux中的bash脚本用于发送电子邮件。我正在使用openssl和s_客户端的SMTP

它是多语言的,所以有时会有一些特殊字符(è,è…)正确地显示在正文中,但不会显示在任何基于Microsoft的主题中(Outlook、Hotmail…)

使用openssl

我使用以下命令:

openssl s_客户端-crlf-quiet-starttls smtp-connect:

是一个纯文本文件,其中包含连接协议和电子邮件数据,如下所示

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
可能是250-8BITMIME在这种情况下我怎么能改变它?我尝试添加-utf8,但它不起作用

使用mailx和postfix

我已经安装了mailutils包并配置了后缀。将智能主机添加到
relayhost
并设置
inet\u interfaces=loopback only

我已使用以下命令发送电子邮件:

echo“带有特殊字符的某些文本”| mailx-s“From:Some text with special charactersèa”-“发件人”Some_email@example.com

由于来自smarthost的UTF8,我收到错误消息:

status=bounched(需要SMTPUTF8,但主机未提供该功能

我在后缀中添加了参数,以避免出现错误
smtputf8\u enable=no

如果我执行最后一个mail命令发送电子邮件,则会发送电子邮件,但特殊字符在基于Microsoft的电子邮件中打印错误,但在Gmail中打印正确

作为解决方法,我创建了一个包含特殊字符的正文失败。我发送为:

mailx-s“一些带有特殊字符的文本”-a“发件人”一些_email@example.com

此电子邮件在所有电子邮件帐户中都以正确的方式显示正文的特殊字符,但在基于Microsoft的帐户中,主题仍然是错误的

关于如何强制主题以正确的方式打印Microsoft基于的电子邮件的一些线索


提前感谢

这里有很多要讨论的内容:

  • 除非所有涉及的系统都支持扩展,否则不能在标头字段中使用UTF-8
  • 扩展名仅表示正文中保留了8位内容(例如UTF-8,而ASCII仅为7位内容)。作为客户端,一旦服务器在对
    EHLO
    命令的响应中表示支持
    8BITMIME
    ,则表示您使用
    MAIL FROM:body=8BITMIME
    发送8位正文
  • 如果所有涉及的服务器都支持
    8BITMIME
    ,您应该为接收邮件的客户端标记您的正文,标题为
    MIME版本:1.0
    内容传输编码:8bit
    ,以及
    内容类型:text/plain;charset=utf-8
    。如果不是所有人都支持
    8BITMIME
    ,您必须使用
  • 由于
    SMTPUTF8
    未得到广泛支持,因此您必须根据对非ASCII进行编码。例如,主题
    “Buenos días!
    可以编码为
    =?ISO-8859-1?Q?=A1Buenos_d=EDas!
  • MAIL FROM
    RCPT TO
    命令中的地址周围需要尖括号。您的示例必须是
    MAIL FROM:
    RCPT TO:
  • 将客户端和服务器重置为初始状态后。作为客户端,您应该发送另一个
    EHLO
    命令,服务器可以使用与TLS握手前不同的扩展名列表来响应该命令
  • 并非所有服务器都支持,即使它们支持,您也应该在发送任何命令之前等待初始问候语,并等待服务器对
    EHLO
    DATA
    命令的响应,然后再继续。虽然您所做的工作可以起作用,但不遵守RFC标准也可以用于
  • 根据,日期是必填的标题字段

这里有很多问题需要讨论:

  • 除非所有涉及的系统都支持扩展,否则不能在标头字段中使用UTF-8
  • 扩展名仅表示正文中保留了8位内容(例如UTF-8,而ASCII仅为7位内容)。作为客户端,一旦服务器在对
    EHLO
    命令的响应中表示支持
    8BITMIME
    ,则表示您使用
    MAIL FROM:body=8BITMIME
    发送8位正文
  • 如果所有涉及的服务器都支持
    8BITMIME
    ,您应该为接收邮件的客户端标记您的正文,标题为
    MIME版本:1.0
    内容传输编码:8bit
    ,以及
    内容类型:text/plain;charset=utf-8
    。如果不是所有人都支持
    8BITMIME
    ,您必须使用
  • 由于
    SMTPUTF8
    未得到广泛支持,因此您必须根据对非ASCII进行编码。例如,主题
    “Buenos días!
    可以编码为
    =?ISO-8859-1?Q?=A1Buenos_d=EDas!
  • MAIL FROM
    RCPT TO
    命令中的地址周围需要尖括号。您的示例必须是
    MAIL FROM:
    RCPT TO:
  • 将客户端和服务器重置为初始状态后。作为客户端,您应该发送另一个
    EHLO
    命令,服务器可以使用与TLS握手前不同的扩展名列表来响应该命令
  • 并非所有服务器都支持,即使它们支持,您也应该在发送任何命令之前等待初始问候语,并等待服务器对
    EHLO
    DATA
    命令的响应,然后再继续。虽然您所做的工作可以起作用,但不遵守RFC标准也可以用于
  • 根据,日期是必填的标题字段

非常感谢您如此详尽完整的解释。最后,我对
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