Sparkpost 使用 bash、CURL 和 SMTP 协议发送电子邮件
Sparkpost sending email using bash, CURL and SMTP protocol
我正在尝试设置自动发送电子邮件。
我想出了如何通过 HTTP 做到这一点:
curl -v \
-H "Content-Type: application/json" \
-H "Authorization: <MY_KEY>" \
-POST https://api.sparkpost.com/api/v1/transmissions \
-d '{
"options":
{
"open_tracking": true,
"click_tracking": true
},
"recipients":
[
{
"address":
{
"email": "to@domain.com"
}
}
],
"content":
{
"from":
{
"name": "ME",
"email": "from@domain.com"
},
"subject": "testing",
"text": "testing"
}
}'
但我想使用 SMTP 协议,因为它是我生成以 base64 文件编码的电子邮件的更好方法。
例如,我如何从 bash 脚本向 google 帐户发送邮件:
curl \
--ssl-reqd \
--url 'smtps://smtp.gmail.com:465' \
--user "$SENDER:$PASSWORD" \
--mail-from "$SENDER" \
--mail-rcpt "$RECIPIENT" \
-T "mail.txt" -k --anyauth
mail.txt 包含:
From: "ME" <from@gmail.com>
To: "YOU" <to@gmail.com>
Subject: Test
Content-Type: multipart/mixed; boundary=MixedBoundary
--MixedBoundary\n
Content-Type: text/html; charset=\"utf-8
<html>
<body><div>
<p>Hello from linux terminal</p>
</div></body>
</html>
--MixedBoundary
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=file.xlsx
...base64symbols...
[base64-encoded text]
--MixedBoundary-
第二个选项比第一个方便得多,因为我可以使用 bash 脚本轻松收集我需要的任何文件,所以我想为 sparkpost 重新制作它。
不幸的是,我没有找到字面意义上的正常描述。在早期阶段,我运行陷入了授权问题。正如我从 smtp api 文档中了解到的那样:https://developers.sparkpost.com/api/smtp/ 我必须像这样授权:
my_email@domain.com:<MY_AUTH_KEY>
所以我尝试连接以查看 sparkpost 的输出:
curl -v \
--ssl-reqd \
--url "smtps://smtp.sparkpostmail.com:587" \
--user "my_email@domain.com:<MY_AUTH_KEY>"
输出:
* Trying 52.34.121.1:587...
* TCP_NODELAY set
* Connected to smtp.sparkpostmail.com (52.34.121.1) port 587 (#0)
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
* Closing connection 0
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number
所以我有两个问题:
如何使用 SMTP 获得 sparkpost 的授权?
发送电子邮件的第二个选项是否适用于 sparkpost?
我更准确地找出了问题并发现了错误。起初我尝试这样连接:
--url "smtps://smtp.sparkpostmail.com:587"
当我不得不这样做时:
--url "smtp://smtp.sparkpostmail.com:587"
要根据 documentation 通过 SMTP 在 Sparkpost 中获得授权,而不是登录,您应该写 SMTP_Injection
.
授权本身如下所示:
--user "SMTP_Injection:<YOUR_COOL_API_KEY>"
一般来说,一切都是这样的:
curl -v \
--ssl --url "smtp://smtp.sparkpostmail.com:587" \
--user "SMTP_Injection:<YOUR_COOL_API_KEY>" \
--mail-from "from@domain.com" \
--mail-rcpt "to@domain.com" \
-T "example_file.txt" -k --anyauth
example_file.txt:
From: Name Surname <from@domain.com>
To: Name Surname <to@domain.com>
Subject: Example
Cc:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="DELIMETER"
--DELIMETER
Content-Type: text/plain; charset=utf-8
Hello, Johny, look at this cat!
--DELIMETER
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=funny_cat.jpg
LOMmL91PLmHcp0/E+eErv5zObgIRo/+vJJN6cto1cDRJ2g
--DELIMETER--
我正在尝试设置自动发送电子邮件。
我想出了如何通过 HTTP 做到这一点:
curl -v \
-H "Content-Type: application/json" \
-H "Authorization: <MY_KEY>" \
-POST https://api.sparkpost.com/api/v1/transmissions \
-d '{
"options":
{
"open_tracking": true,
"click_tracking": true
},
"recipients":
[
{
"address":
{
"email": "to@domain.com"
}
}
],
"content":
{
"from":
{
"name": "ME",
"email": "from@domain.com"
},
"subject": "testing",
"text": "testing"
}
}'
但我想使用 SMTP 协议,因为它是我生成以 base64 文件编码的电子邮件的更好方法。
例如,我如何从 bash 脚本向 google 帐户发送邮件:
curl \
--ssl-reqd \
--url 'smtps://smtp.gmail.com:465' \
--user "$SENDER:$PASSWORD" \
--mail-from "$SENDER" \
--mail-rcpt "$RECIPIENT" \
-T "mail.txt" -k --anyauth
mail.txt 包含:
From: "ME" <from@gmail.com>
To: "YOU" <to@gmail.com>
Subject: Test
Content-Type: multipart/mixed; boundary=MixedBoundary
--MixedBoundary\n
Content-Type: text/html; charset=\"utf-8
<html>
<body><div>
<p>Hello from linux terminal</p>
</div></body>
</html>
--MixedBoundary
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=file.xlsx
...base64symbols...
[base64-encoded text]
--MixedBoundary-
第二个选项比第一个方便得多,因为我可以使用 bash 脚本轻松收集我需要的任何文件,所以我想为 sparkpost 重新制作它。
不幸的是,我没有找到字面意义上的正常描述。在早期阶段,我运行陷入了授权问题。正如我从 smtp api 文档中了解到的那样:https://developers.sparkpost.com/api/smtp/ 我必须像这样授权:
my_email@domain.com:<MY_AUTH_KEY>
所以我尝试连接以查看 sparkpost 的输出:
curl -v \
--ssl-reqd \
--url "smtps://smtp.sparkpostmail.com:587" \
--user "my_email@domain.com:<MY_AUTH_KEY>"
输出:
* Trying 52.34.121.1:587...
* TCP_NODELAY set
* Connected to smtp.sparkpostmail.com (52.34.121.1) port 587 (#0)
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* error:1408F10B:SSL routines:ssl3_get_record:wrong version number
* Closing connection 0
curl: (35) error:1408F10B:SSL routines:ssl3_get_record:wrong version number
所以我有两个问题:
如何使用 SMTP 获得 sparkpost 的授权?
发送电子邮件的第二个选项是否适用于 sparkpost?
我更准确地找出了问题并发现了错误。起初我尝试这样连接:
--url "smtps://smtp.sparkpostmail.com:587"
当我不得不这样做时:
--url "smtp://smtp.sparkpostmail.com:587"
要根据 documentation 通过 SMTP 在 Sparkpost 中获得授权,而不是登录,您应该写 SMTP_Injection
.
授权本身如下所示:
--user "SMTP_Injection:<YOUR_COOL_API_KEY>"
一般来说,一切都是这样的:
curl -v \
--ssl --url "smtp://smtp.sparkpostmail.com:587" \
--user "SMTP_Injection:<YOUR_COOL_API_KEY>" \
--mail-from "from@domain.com" \
--mail-rcpt "to@domain.com" \
-T "example_file.txt" -k --anyauth
example_file.txt:
From: Name Surname <from@domain.com>
To: Name Surname <to@domain.com>
Subject: Example
Cc:
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="DELIMETER"
--DELIMETER
Content-Type: text/plain; charset=utf-8
Hello, Johny, look at this cat!
--DELIMETER
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename=funny_cat.jpg
LOMmL91PLmHcp0/E+eErv5zObgIRo/+vJJN6cto1cDRJ2g
--DELIMETER--