如何不使用Zapier通过webhook触发Sendgrid发送邮件
SendGrid 入站Webhook触发邮件发送实现方案
SendGrid 官方暂未提供原生的「入站 Webhook 直接触发邮件发送」能力,你找到的关联Zapier的方案,本质是Zapier作为中间层承接Webhook请求后,再调用SendGrid发信接口实现的,你完全可以自己开发轻量服务替代Zapier实现需求,具体实现步骤如下:
前置准备
- 完成SendGrid发件域名认证,获取拥有
Mail Send权限的API Key - 提前配置好需要使用的邮件内容/动态模板,记录对应模板ID(若使用动态模板需提前确认变量占位符配置正确)
实现核心逻辑
你只需要开发一个简单的HTTP接口服务作为Webhook接收端,核心逻辑如下:
- 承接上游触发方的Webhook请求,自定义校验规则(比如固定请求头Token、签名校验等)过滤非法请求,避免恶意触发垃圾邮件
- 解析Webhook请求中的业务参数,比如收件人地址、邮件动态变量值等
- 按照SendGrid官方接口要求拼装发信参数,调用SendGrid邮件发送接口完成发信
参考代码示例(Python Flask实现)
from flask import Flask, request import sendgrid from sendgrid.helpers.mail import Mail, Email, To app = Flask(__name__) # 替换为自己的SendGrid API Key SG_API_KEY = "你的SendGrid API Key" sg = sendgrid.SendGridAPIClient(api_key=SG_API_KEY) # 自定义Webhook校验Token,上游调用时需在请求头携带对应值 WEBHOOK_VERIFY_TOKEN = "自定义的校验字符串" # 替换为你认证过的发件邮箱 FROM_EMAIL = "你的认证发件邮箱地址" @app.route("/trigger-send-email", methods=["POST"]) def send_email_via_sg(): # 校验请求合法性 if request.headers.get("X-Webhook-Token") != WEBHOOK_VERIFY_TOKEN: return {"status": "error", "msg": "非法请求"}, 403 # 解析请求参数 req_params = request.get_json() to_email = req_params.get("to_email") template_vars = req_params.get("template_vars", {}) # 拼装发信请求,以下为动态模板发信示例,可根据需求调整为静态内容发信 mail = Mail( from_email=FROM_EMAIL, to_emails=To(to_email), ) mail.dynamic_template_id = "你的SendGrid动态模板ID" mail.dynamic_template_data = template_vars # 调用SendGrid接口发信 resp = sg.send(mail) return {"status": "success", "sg_response_code": resp.status_code} if __name__ == "__main__": app.run(host="0.0.0.0", port=8080)
部署使用
将上述接口服务部署到公网可访问的服务器/容器服务中,开启HTTPS加密后,将接口的公网访问URL提供给上游触发方,上游按照你定义的参数格式调用该Webhook地址即可自动触发SendGrid发送邮件。
注意事项
- 建议添加接口请求频率限制,避免被恶意调用产生超额发信费用
- 可以增加发信结果日志记录,方便后续排查发信失败问题
- 生产环境部署建议使用专业WSGI服务替代Flask自带的运行服务
内容的提问来源于stack exchange,提问作者Python Learner
相关产品推荐
相关产品推荐

