求助:配置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.phpdata是base64编码的"Hello Upstream",你可以打开日志文件查看是否正确解析。 - 触发Gmail推送:最后别忘了在Gmail API中配置推送通知,指定你创建的Pub/Sub主题,这样有新邮件时才会触发推送。可以通过API调用或Google Cloud控制台的Gmail API设置页面完成,确保监听的邮箱账号正确。
如果遇到推送失败,直接去Pub/Sub订阅页面查看推送失败日志,里面会显示具体错误原因(比如端点不可达、权限不足、脚本返回错误码等),根据日志排查就能快速解决问题。
内容的提问来源于stack exchange,提问作者Mortelity
相关产品推荐
相关产品推荐

