![cURL:使用 -F(多部分/附件)时如何设置电子邮件主题](https://linux22.com/image/1620080/cURL%EF%BC%9A%E4%BD%BF%E7%94%A8%20-F%EF%BC%88%E5%A4%9A%E9%83%A8%E5%88%86%2F%E9%99%84%E4%BB%B6%EF%BC%89%E6%97%B6%E5%A6%82%E4%BD%95%E8%AE%BE%E7%BD%AE%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E4%B8%BB%E9%A2%98.png)
我正在尝试使用 cURL 发送电子邮件。它必须包含附件,因此我使用 -F / --form 选项:
(这是一行,但为了澄清起见,我在这里这样写)
curl smtp://smtp.example.com
--ssl
--mail-from [email protected]
--mail-rcpt [email protected]
--user login
-F "=<body.txt;encoder=quoted-printable"
-F "[email protected];encoder=base64"
它有点起作用;邮件到了,但我不知道如何在电子邮件本身上设置标题(事实上,我现在唯一需要的是主题)。
我尝试将其设置为第一部分(文本):
-F "=<body.txt;encoder=quoted-printable;headers=Subject: The files you requested"
但是 cURL 有效地将标题设置为该部分,从而产生了如下电子邮件(原始文本):
(email headers not including Subject)
-----------------part-boundary
Content-Transfer-Encoding: quoted-printable
Subject: The files you requested
(content of body.txt)
-----------------part-boundary
Content-Disposition: attachment; filename="files.zip"
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
(content of files.zip encoded in base64)
-----------------part-boundary--
那么,如何设置电子邮件的主题?
答案1
虽然文档仅提到 HTTP,但 -H / --header 选项也适用于 SMTP。
因此设置电子邮件主题的方法是在命令行中添加此选项:
-H "Subject: The files you requested"
但是,由于需要其他标题(例如 To: 和 CC:),您可能希望将它们全部写入文件并使用它:
-H @headers.txt
就是这样。
答案2
完整示例在此。它分解了 curl 命令的所有元素,因此您可以看到它如何将所有组件组合在一起以创建带有附件的消息、找出附件的 MIME 类型并将其全部发送,无需任何中间文件,仅使用本机 curl。(GitHub - send-ses)
#!/bin/bash
sesAccess='AKIAXXXXXXXXXXXXXXXX'
sesSecret='Bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
sesFromName="Joe McJones"
sesFromAddress="[email protected]"
sesToName="Mary McMary"
sesToAddress="[email protected]"
sesSubject="Test Email from Script"
sesSMTP="email-smtp.us-east-1.amazonaws.com"
sesPort="465"
sesMessage=$'Test of line 1\nTest of line 2'
sesFile="$1"
sesMIMEType=`file --mime-type "$sesFile" | sed 's/.*: //'`
curl -v --url smtps://$sesSMTP:$sesPort --ssl-reqd --mail-from $sesFromAddress --mail-rcpt $sesToAddress --user $sesAccess:$sesSecret -F '=(;type=multipart/mixed' -F "=$sesMessage;type=text/plain" -F "file=@$sesFile;type=$sesMIMEType;encoder=base64" -F '=)' -H "Subject: $sesSubject" -H "From: $sesFromName <$sesFromAddress>" -H "To: $sesToName <$sesToAddress>"