如何从SendGrid账户获取退信及垃圾举报的收件人邮箱列表?
解决方案:使用SendGrid Event API获取具体退信/垃圾邮件举报收件人
你当前用的Stats API仅返回聚合统计数据,拿不到单个事件的具体收件人信息。要获取退信(bounce)和垃圾邮件举报(spam_report)的邮箱地址,得调用Event API,并通过参数过滤指定事件类型。
代码实现示例
以下是PHP环境下用SendGrid SDK调用Event API的完整代码,支持按时间范围查询并提取目标邮箱:
<?php require 'vendor/autoload.php'; $sg = new \SendGrid(getenv('SENDGRID_API_KEY')); // 构造查询参数:指定时间范围、事件类型、分页参数 $query_params = [ 'start_time' => strtotime('2023-08-08 00:00:00'), // 起始时间戳(秒级) 'end_time' => strtotime('2023-08-08 23:59:59'), // 结束时间戳(秒级) 'limit' => 500, // 单次请求最大返回数 'offset' => 0, // 分页偏移量 'event' => ['bounce', 'spam_report'] // 过滤目标事件类型 ]; try { $response = $sg->client->events()->get(null, $query_params); $events = json_decode($response->body(), true); // 提取并收集需标记的邮箱 $blockedEmails = []; foreach ($events as $event) { // 处理退信事件,区分硬退/软退 if ($event['event'] === 'bounce') { $blockedEmails[] = [ 'email' => $event['email'], 'reason' => 'bounce', 'bounce_type' => $event['type'] // 可选:hard/soft bounce ]; } // 处理垃圾邮件举报事件 elseif ($event['event'] === 'spam_report') { $blockedEmails[] = [ 'email' => $event['email'], 'reason' => 'spam_report' ]; } } // 后续逻辑:将$blockedEmails写入数据库标记为禁止联系 // 示例:print_r($blockedEmails); } catch (Exception $e) { echo '请求错误: ' . $e->getMessage(); } ?>
关键说明
- 事件过滤:通过
event参数指定bounce和spam_report,只返回目标事件,减少无效数据。 - 分页处理:如果目标时间范围内的事件超过500条,需要循环递增
offset参数,直到返回结果为空,确保获取所有数据。 - 字段解析:每个事件的
email字段就是收件人邮箱;退信事件的type字段可区分硬退(永久失效)和软退(临时问题),可根据业务需求决定是否标记软退邮箱。 - 时间格式:Event API使用Unix秒级时间戳,需将日期转换为对应格式。
轮询落地建议
把上述代码封装成定时任务(比如Linux Cron、Windows任务计划),每周执行一次,自动同步并更新数据库中的禁止联系邮箱列表。
内容的提问来源于stack exchange,提问作者Shaun
相关产品推荐
相关产品推荐

