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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:01:15