SendGrid singlesends接口send_at参数传递报错,求正确传参方式
问题原因与解决办法
不是文档有误,你的参数传递方式存在两处问题:
1. "send_at": "now" 不符合API格式要求
SendGrid的send_at参数要求传入RFC3339格式的UTC时间字符串(例如"2024-05-20T14:30:00Z"),直接传"now"是不合法的,会导致JSON解析失败。
- 如果需要立即发送,直接省略
send_at参数即可(你最初的命令已经验证过这种方式可行)。 - 如果要明确指定当前时间,需生成符合格式的字符串再传入。
2. 命令替换的引号使用错误
第二个命令中,$(date ...)被包裹在单引号里,Bash不会解析单引号内的命令替换,导致API收到的send_at值是原始字符串"$(date --utc --iso=s --date='1 minute')",这显然不是合法的时间格式。
正确的延迟发送示例
先通过命令替换生成合法的时间字符串,再用双引号包裹JSON内容(注意转义JSON内部的双引号):
# 生成1分钟后的UTC时间(ISO8601格式) SEND_AT=$(date --utc --iso=s --date='1 minute') # 发送请求 curl -X POST "https://api.sendgrid.com/v3/marketing/singlesends" \ --header "Authorization: Bearer $SENDGRID_API_KEY" \ --header "Content-Type: application/json" \ --data "{\"name\": \"Miss Christine Morgan\", \"send_at\": \"$SEND_AT\"}"
或者用Here Document避免引号转义的麻烦:
SEND_AT=$(date --utc --iso=s --date='1 minute') curl -X POST "https://api.sendgrid.com/v3/marketing/singlesends" \ --header "Authorization: Bearer $SENDGRID_API_KEY" \ --header "Content-Type: application/json" \ -d @- <<EOF {"name": "Miss Christine Morgan", "send_at": "$SEND_AT"} EOF
内容的提问来源于stack exchange,提问作者Jeffrey Yasskin
相关产品推荐
相关产品推荐

