如何通过CURLOPT_POSTFIELDS实现Sendgrid批量发送两封邮件?
用SendGrid一次发送多封邮件(无需重复CURL代码)
当然可以!SendGrid的v3 API原生支持在单个API请求中发送多封个性化邮件,你完全不需要重复整个CURL逻辑——只要修改请求体里的personalizations数组就搞定了,这正是你想要的优化方式。
原理说明
SendGrid的请求体中,personalizations是一个数组,数组里的每一个对象就对应一封独立的邮件(可以有不同的收件人、主题甚至内容)。所以你只需要给这个数组追加新的对象,就能一次发送多封邮件。
修改后的代码示例
为了避免直接拼接JSON字符串容易出错,建议先把请求体转成PHP数组,修改后再转成JSON:
<?php $curl = curl_init(); // 先定义邮件的基础配置和内容 $emailData = [ "from" => [ "email" => "me@example.com" ], "content" => [ [ "type" => "text/html", "value" => "Hello world!" ] ], // 重点:personalizations数组可以放多个邮件配置 "personalizations" => [ // 第一封邮件 [ "to" => [ ["email" => "you@example.com"] ], "subject" => "Test Email 1" ], // 第二封邮件(新增) [ "to" => [ ["email" => "another@example.com"] ], "subject" => "Test Email 2" ] ] ]; curl_setopt_array($curl, array( CURLOPT_URL => "https://api.sendgrid.com/v3/mail/send", CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", // 将PHP数组转成JSON字符串 CURLOPT_POSTFIELDS => json_encode($emailData), CURLOPT_HTTPHEADER => array( "authorization: Bearer SG.1234123412341234", "cache-control: no-cache", "content-type: application/json" ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); // 处理响应和错误 if ($err) { echo "cURL Error #:" . $err; } else { echo "Emails sent successfully! Response: " . $response; } ?>
额外提示
- 你还可以给不同的邮件设置不同的内容,只需要在对应的
personalizations对象里添加content字段即可(会覆盖全局的content)。 - 确保你的SendGrid API密钥拥有
mail.send的权限。 - 如果要发送大量邮件,SendGrid有请求频率限制,单封请求内的
personalizations数量也有上限,不过发送两封完全没问题。
内容的提问来源于stack exchange,提问作者user411103
相关产品推荐
相关产品推荐

