使用 CURL 发送 multipart/alternative 电子邮件,带编码器 = quoted-printable。如何操作?

使用 CURL 发送 multipart/alternative 电子邮件,带编码器 = quoted-printable。如何操作?

下面是我目前如何使用 CURL 发送 multipart/alternative 的示例。我在文本编辑器中编写此电子邮件,将其保存到文件中,然后使用 CURL 发送整个内容。

To: "John Connor" <[email protected]>
From: "Sarah Connor" <[email protected]>
Subject: A multipart/alternative text/plain + text/html email
MIME-Version: 1.0 (Created with SublimeText 3)
Content-Type: multipart/alternative; boundary="content-boundary-alternative"

Preamble: This is a multipart/alternative message in MIME format.

--content-boundary-alternative
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit

Good morning.

This is a message in text/plain format.

--content-boundary-alternative
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang=3D"en">
<head>
<meta charset=3D"utf-8">
<meta http-equiv=3D"Content-Type" content=3D"text/html">
</head>
<body>
Good morning.<br/>
<br/>
This is a message in text/html format.<br/>
</body>
</html>

--content-boundary-alternative--

然后我像这样发送:

curl --verbose -ssl smtps://secure.example.com:465 --login-options AUTH=PLAIN --user [email protected]:Letmein#123 --mail-from [email protected] --mail-rcpt [email protected] --mail-rcpt-allowfails --upload-file complete-message.eml

到目前为止,一切都很好。

在阅读 CURL 手册页时,更具体地说,https://curl.se/docs/manpage.html#-F我注意到似乎有一种方法可以正确编码 quoted-printable text/html 内容以供传输,-F, --form encoder=quoted-printable这样我就不必手动执行此操作。

有人能提供我的方法的改编版吗encoder=quoted-printable

我感觉这需要将标题和正文放在单独的文件中,但我仍在阅读。

答案1

要使用-F选项发送多部分消息,必须使用分组(?)符号:"=(;type=multipart/alternative"/ "=)"[1]。

(这是一行,但为了清楚起见,我在这里这样写)

curl --verbose -ssl smtps://secure.example.com:465
    --login-options AUTH=PLAIN
    --user [email protected]:Letmein#123
    --mail-from [email protected]
    --mail-rcpt [email protected] --mail-rcpt [email protected]
    --mail-rcpt-allowfails
    -H @headers.txt
    -F "=(;type=multipart/alternative"
    -F "=<body.txt;encoder=quoted-printable"
    -F "=<body.html;encoder=quoted-printable"
    -F "=)"
    -F "[email protected];encoder=base64"

在这个例子中,第一部分 ( =() 打开一个组,其中的所有内容都被视为不同格式的相同内容 ( type=multipart/alternative)。然后=<添加两个部分 ( ),一个纯文本部分和一个 HTML 部分,均使用 quoted-printable 算法进行编码。使用 关闭该组=)

下一部分不在替代组内,而是附加在(=@)上。

创建头文件时,请考虑:

  • 它应该包含接收者看到的:日期:、发件人:、主题:、收件人:、抄送:和回复:(如果适用)。
  • cURL 负责处理必需的标头。
  • 您可以添加其他标头,它们也会被添加。如果您不喜欢 cURL 创建的某个标头,您可以将其添加到文件中以覆盖默认标头。
  • 新行必须是 CR-LF [2]。
  • 我在 Windows 中运行了类似的命令,并且必须使用 windows-1252 字符集对标头文件进行编码,因为使用 UTF-8 会破坏电子邮件,但您的情况可能会有所不同。我没有在 GNU/Linux 上尝试过。

参考:

[1]https://curl.se/docs/manpage.html#-F

[2]https://www.rfc-editor.org/rfc/rfc821

相关内容