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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:51:47