下面是我目前如何使用 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 上尝试过。
参考: