如何在Django中使用Twilio SendGrid实现邮件定时发送?
解决SendGrid定时邮件发送不生效的问题
核心前提检查
先确认你的SendGrid账号已开启Schedule Send功能:登录SendGrid控制台,进入「Settings > Mail Settings」找到Schedule Send,确保状态为Enabled。
代码修正与细节排查
你的思路方向是对的,但需要注意几个关键细节:
1. 确保FinalScheduleTime是正确的秒级Unix时间戳
SendGrid要求send_at的值必须是从1970年1月1日开始计算的秒数,不能是字符串、ISO时间格式或毫秒级时间戳。示例转换代码:
import time from datetime import datetime # 将目标时间转为秒级Unix时间戳 target_time = datetime(2024, 10, 1, 10, 0, 0) FinalScheduleTime = int(time.mktime(target_time.timetuple()))
2. 正确设置X-SMTPAPI请求头
你的第一种写法是标准方式,但要避免覆盖已有自定义头(如果有的话),推荐用update方式添加:
# 替换原有header设置代码 message.extra_headers.update({ 'X-SMTPAPI': json.dumps({'send_at': FinalScheduleTime}) }) # 若无其他自定义头,直接赋值也可 # message.extra_headers = {'X-SMTPAPI': json.dumps({'send_at': FinalScheduleTime})}
3. 验证API权限与响应细节
- 确认你的SendGrid API Key拥有
mail.send权限(在API Keys页面查看权限配置) - 打印响应体排查问题,除了状态码202,还能看到定时任务的创建状态:
response = sg.send(message) print(response.body) # 查看响应详情,可能包含任务ID或错误提示
常见错误清单
- 时间戳格式错误:用毫秒级时间戳会被SendGrid忽略,直接立即发送邮件
- 账号功能未开启:Schedule Send默认可能关闭,需手动开启
- 邮件触发限制:若邮件被标记为垃圾邮件,定时设置不会生效
- API权限不足:缺少
mail.send权限会导致发送失败或忽略配置
内容的提问来源于stack exchange,提问作者Iron Man
相关产品推荐
相关产品推荐

