使用SendGrid V3 API发送邮件:JSON格式不符问题求助
修正SendGrid V3 API邮件格式问题
问题出在你的PHP数组结构上——SendGrid V3 API明确要求personalizations和to字段都是数组类型(哪怕你只需要发送给一组收件人、一个用户),但你当前的写法把它们定义成了普通关联数组,导致json_encode后变成了对象而非数组,不符合API的格式要求。
修正后的PHP代码
$email_content = [ 'personalizations' => [ [ 'to' => [ [ 'email' => 'ashuomble5@gmail.com', 'name' => 'Ashutosh' ] ], 'subject' => 'Test' ] ], 'from' => [ 'email' => 'ashuomble5@gmail.com', 'name' => 'Ashu' ], 'reply_to' => [ 'email' => 'ashuomble5@gmail.com', 'name' => 'AO' ], 'content' => [ [ 'type' => 'text/plain', 'value' => 'Hello' ] ] ];
关键修正点
personalizations:原来的关联数组被包裹进了一个索引数组[]里,这样json_encode后会输出为数组格式[],符合API要求(支持多组个性化设置)to:单个收件人信息同样被包裹进索引数组[],确保输出为数组格式,后续也方便添加多个收件人content:同样调整为数组包裹的结构,因为SendGrid支持同时发送文本和HTML格式的内容
修正后json_encode的输出
{ "personalizations": [ { "to": [ { "email": "ashuomble5@gmail.com", "name": "Ashutosh" } ], "subject": "Test" } ], "from": { "email": "ashuomble5@gmail.com", "name": "Ashu" }, "reply_to": { "email": "ashuomble5@gmail.com", "name": "AO" }, "content": [ { "type": "text/plain", "value": "Hello" } ] }
这个格式完全匹配SendGrid V3 API的要求,现在你可以正常调用API发送邮件了。
内容的提问来源于stack exchange,提问作者user9364222
相关产品推荐
相关产品推荐

