如何使用SendGrid的SMTP API使用curl命令从bash脚本发送简单的HTML文件?



我是bash脚本的新手。我花了几个小时寻找解决方案。

#!/bin/bash
# EMAIL_TO, FROM_EMAIL, etc variables are initialized here
# ...
# ...
maildata='{"personalizations": [{"to": [{"email": "'${EMAIL_TO}'"}]}],"from": {"email": "'${FROM_EMAIL}'",
"name": "'${FROM_NAME}'"},"subject": "'${SUBJECT}'","content": [{"type": "text/html", "value": "'${bodyHTML}'"}]}'
curl    --url https://api.sendgrid.com/v3/mail/send 
--header 'Authorization: Bearer '$SENDGRID_API_KEY 
--header 'Content-Type: application/json' 
--data "'$maildata'"

只要在脚本内部设置了 bodyHTML,上面的代码段就可以正常工作。 但是我希望以这种方式发送外部html文件

所以,问题: 例如,如何使用上述方案发送"邮件.html"? (如何设置正文 HTML 变量?使用什么命令?bodyHTML=$(cat "mail.html"(# 在执行卷曲行时导致错误消息(

该问题似乎与包含双引号的bodyHTML(从文件或在脚本中初始化(有关。例如,在 中。但是怎么办呢...?也许我需要首先在脚本中将 HTML 序列化为 JSON..?如何?

我想bodyHTML需要正确的json编码,请尝试

maildata='{"personalizations": [{"to": [{"email": "'${EMAIL_TO}'"}]}],"from": {"email": "'${FROM_EMAIL}'",
"name": "'${FROM_NAME}'"},"subject": "'${SUBJECT}'","content": [{"type": "text/html", "value": '$(printf "%s" "${bodyHTML}" | php -r 'echo json_encode(stream_get_contents(STDIN));')'}]}'

。ofc 它们可能都应该正确进行 JSON 编码,而不仅仅是 HTML,但 html 似乎是最有可能在这里破坏您的 json 的东西。

最新更新