GCP Cloud Function+SendGrid发邮件测试无通知问题求助
问题排查与解决方案
核心问题分析
你的代码依赖SendGrid API发送邮件,和Gmail凭证无关——因为你没用到Gmail的SMTP或API,而是用SendGrid服务。收不到邮件的原因主要集中在SendGrid配置不全、GCP环境变量未正确设置、邮件被拦截这几个方向,按以下步骤逐一排查:
1. 确认SendGrid API Key的有效性与权限
- 登录SendGrid控制台,检查你创建的
EMAIL_API_KEY是否存在,且开启了Mail Send权限(创建API Key时必须勾选该权限)。 - 本地测试API Key可用性:用curl或Postman调用SendGrid的发件接口,确认能正常发送邮件。
2. 检查GCP Cloud Function的环境变量配置
- 进入你的Cloud Function详情页,切换到环境变量、网络、触发器标签,确认
EMAIL_API_KEY已正确添加,值和SendGrid控制台的API Key完全一致(注意大小写、无多余空格)。 - 验证变量加载:临时修改代码,返回
os.environ.get('EMAIL_API_KEY')的前几位,确认环境变量能被函数读取。
3. 验证SendGrid发件人邮箱的合规性
- SendGrid要求发件人邮箱(你的
abc@gmail.com)必须完成域名验证或单邮箱验证,否则邮件会被拦截或丢弃。 - 登录SendGrid控制台,进入Settings > Sender Authentication,按提示完成邮箱验证流程(若用Gmail作为发件人,需按步骤完成验证)。
4. 检查邮件投递状态
- 登录SendGrid控制台,进入Email Activity页面,搜索你发送的邮件,查看具体状态:
- 显示
Delivered:检查收件邮箱的垃圾邮件文件夹,或确认收件地址是否正确。 - 显示
Blocked/Bounced:根据SendGrid给出的原因调整(比如发件人未验证、收件地址无效)。 - 显示
Pending:可能是SendGrid队列延迟,等待几分钟再查看。
- 显示
5. 代码小优化
你的代码中导入语句放在函数内部不符合规范,且from_email的名称参数为空,可做如下修正(避免部分邮箱系统标记可疑):
import os from sendgrid import SendGridAPIClient from sendgrid.helpers.mail import Mail, Email from python_http_client.exceptions import HTTPError def email(request): sg = SendGridAPIClient(os.environ['EMAIL_API_KEY']) html_content = "<p>Hello World!</p>" message = Mail( to_emails="xyz.k@gmail.com", from_email=Email('abc@gmail.com', 'Test Sender'), subject="Hello world", html_content=html_content ) try: response = sg.send(message) return f"email.status_code={response.status_code}" except HTTPError as e: return e.message
6. 查看Cloud Function执行日志
- 进入Cloud Function的日志标签,查看执行时的详细日志:
- 若出现
KeyError: 'EMAIL_API_KEY':说明环境变量未正确配置。 - 若出现HTTP错误(如401、403):对应SendGrid的权限或API Key问题,根据错误码排查。
- 若出现
内容的提问来源于stack exchange,提问作者jagadeesh kumar
相关产品推荐
相关产品推荐

