发布到sendgrid API

时间:2017-06-24 17:25:44

标签: json bash sendgrid

我正在尝试为Nagios制作一个脚本,使用Sendgrid API发送邮件。

当我的身体/主体没有任何空间时,它可以正常工作。但是当我拥有它时,我得到了这个错误:

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   144  100    63  100    81    140    181 --:--:-- --:--:-- --:--:--   181
curl: (3) [globbing] unmatched close brace/bracket in column 6
{"errors":[{"message":"Bad Request","field":null,"help":null}]}

这是我的剧本。

#!/bin/bash
sendgridapikey="................................................."
mailto="mymail@mail.com"
mailfrom="sendermail@mail.com"
subject="subject here"
body="DefaultNagiosMailBody\n\nTest"
while getopts a:t:f:s:b: option
do
case "${option}"
in
a) sendgridapikey=${OPTARG};;
t) mailto=${OPTARG};;
f) mailfrom=${OPTARG};;
s) subject=${OPTARG};;
b) body=${OPTARG};;
esac
done
curl -X POST "https://api.sendgrid.com/v3/mail/send" -H "Authorization: Bearer $sendgridapikey" -H "Content-Type: application/json" -d \
'{"personalizations":[{"to":[{"email":"'$mailto'"}],"subject":"'$subject'"}],"from":{"email":"'$mailfrom'","name": "Nagios"},"content":[{"type":"text/plain","value":"'$body'"}]}'

1 个答案:

答案 0 :(得分:3)

您没有正确引用变量。写得像这样:

'{"personalizations":[{"to":[{"email":"'"$mailto"'"}],"subject":"'"$subject"'"}],"from":{"email":"'"$mailfrom"'","name": "Nagios"},"content":[{"type":"text/plain","value":"'"$body"'"}]}'

请注意,我将所有变量包装在双引号中。 你写它的方式, 它们根本没有用引号括起来。

要在简化示例中显示,您的代码看起来基本上是这样的:

curl -d 'quoted string '$var' and some more'

似乎引用了$var,但事实并非如此。 左侧的单引号关闭在quoted之前开始的单引号文本。右侧的单引号开始一个新的单引号文本,以more结尾。 $var本身未引用此处。 这就是它的引用方式:

curl -d 'quoted string '"$var"' and some more'

我在顶部的建议中应用了相同的逻辑。