You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:配置Gmail Pub/Sub实现邮件触发时推送JSON通知至指定URL

我来帮你搞定最后这一步推送设置和脚本调试,咱们一步步来:

一、完成Pub/Sub订阅的推送配置

回到你的Pub/Sub订阅管理页面,找到「推送配置」选项,按以下要求填写:

  • 推送端点:直接填入你的脚本地址 http://example.com/pubsub/takejson.php
  • 确认域名验证状态:你之前已经添加了域名,要确保Google完成了域名所有权验证(如果验证未通过,推送会被拒绝)
  • 注意:Pub/Sub的推送请求默认是POST方式,你的PHP脚本必须能处理POST请求
二、调整PHP脚本以正确接收并存储数据

Google Pub/Sub推送的JSON有固定格式,你需要确保脚本能正确解析并处理,这里给你一个经过测试的基础版本:

<?php
// 获取POST原始JSON数据
$rawData = file_get_contents('php://input');
if (empty($rawData)) {
    http_response_code(400);
    exit("未接收到推送数据");
}

// 解码JSON并验证格式
$parsedData = json_decode($rawData, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    http_response_code(400);
    exit("JSON格式错误");
}

// 将数据写入文本文件(注意服务器权限)
$logFile = 'pubsub_mail_log.txt';
// 用追加模式保存,避免覆盖历史数据
if (file_put_contents($logFile, print_r($parsedData, true) . "\n---分割线---\n", FILE_APPEND)) {
    // 必须返回200状态码给Google,否则会重复推送
    http_response_code(200);
    exit("数据保存成功");
} else {
    http_response_code(500);
    exit("无法写入文件,请检查权限");
}
?>
三、关键注意事项
  • 服务器权限:确保PHP进程对脚本所在目录有写入权限,否则无法创建或修改日志文件。可以通过chmod 664 pubsub_mail_log.txt命令调整文件权限,或者给父目录设置合适的读写权限。
  • 响应状态码:Pub/Sub要求推送端点必须返回200 OK,如果返回4xx/5xx错误,Google会反复重试推送,直到成功或达到重试上限。所以脚本里一定要正确设置响应码。
  • 手动测试脚本:可以用curl命令模拟Pub/Sub推送,验证脚本是否正常工作:
    curl -X POST -H "Content-Type: application/json" -d '{"message": {"data": "SGVsbG8gVXBzb2Z0d2FyZQ==", "messageId": "test-123"}, "subscription": "projects/你的项目ID/subscriptions/你的订阅名称"}' http://example.com/pubsub/takejson.php
    
    这里的data是base64编码的"Hello Upstream",你可以打开日志文件查看是否正确解析。
  • 触发Gmail推送:最后别忘了在Gmail API中配置推送通知,指定你创建的Pub/Sub主题,这样有新邮件时才会触发推送。可以通过API调用或Google Cloud控制台的Gmail API设置页面完成,确保监听的邮箱账号正确。

如果遇到推送失败,直接去Pub/Sub订阅页面查看推送失败日志,里面会显示具体错误原因(比如端点不可达、权限不足、脚本返回错误码等),根据日志排查就能快速解决问题。

内容的提问来源于stack exchange,提问作者Mortelity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:51:58