Django + Anymail + Mailgun:邮件定时发送功能实现
如何用Anymail调用Mailgun的定时发送功能
好问题!Anymail确实把Mailgun的核心特性都封装好了,包括定时发送——其实用起来特别简单,核心就是利用Anymail提供的esp_extra参数,传递Mailgun专属的send_at字段就行。
具体实现步骤
- 第一步:先确定定时发送的时间戳
Mailgun要求send_at必须是秒级Unix时间戳,不能是毫秒。比如想在3小时后发送,就这么计算:import time # 计算3小时后的时间戳(秒级) send_later_timestamp = int(time.time()) + 3 * 3600 - 第二步:在邮件对象中添加
esp_extra参数
不管你用Anymail原生的AnymailMessage,还是Django原生的邮件类,都能轻松实现:# 方式1:使用AnymailMessage from anymail.message import AnymailMessage msg = AnymailMessage( subject="这是一封定时邮件", body="3小时后才会送达哦", from_email="你的发件邮箱@域名.com", to=["收件人邮箱@example.com"], # 这里传入Mailgun的定时参数 esp_extra={"send_at": send_later_timestamp} ) msg.send() # 方式2:使用Django原生邮件类(配合Anymail后端) from django.core.mail import EmailMultiAlternatives msg = EmailMultiAlternatives( subject="这是一封定时邮件", body="3小时后才会送达哦", from_email="你的发件邮箱@域名.com", to=["收件人邮箱@example.com"] ) msg.esp_extra = {"send_at": send_later_timestamp} msg.send()
额外注意点
- Mailgun有时间限制:定时发送的时间不能超过72小时(3天),超过这个范围的请求会被直接拒绝。
- 如果要同时用收件人变量这类Mailgun专属特性,也可以把它们一起放进
esp_extra里,比如:esp_extra={ "send_at": send_later_timestamp, "recipient-variables": '{"收件人邮箱@example.com": {"username": "张三"}}' }
Anymail的esp_extra本质就是对接各邮件服务商专属功能的“万能接口”,用它就能轻松解锁Mailgun的各种定制特性啦~
内容的提问来源于stack exchange,提问作者Will
相关产品推荐
相关产品推荐

