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

使用Mailgun向字典列表批量发送个性化邮件仅首封成功问题咨询

问题原因

你的代码仅发送第一封邮件的核心问题是:在循环内部直接调用了return语句,第一次发信请求执行完成后函数就直接终止,后续所有用户的发信逻辑都不会运行。
另外需要注意你定义用户字典时Days字段是大写开头,原始代码中调用的是d['days'](小写开头),键名不统一会触发KeyError,需要先统一字段名。

修复方案1:调整循环逻辑(单条发送)

适合用户量较小的场景,逻辑简单易排查:

import requests

def send_email():
    # 可存储所有发信响应用于后续排查
    response_list = []
    # 给未过期用户发送提醒
    for d in notify_users:
        resp = requests.post(
            "https://api.mailgun.net/v3/MYDOMAIN/messages",
            auth=("api", "MAILGUN_API_KEY"),
            data={
                "from": "IT <mailgun@MYDOMAIN>",
                "to": d['Email'],
                "subject": "Password Reminder",
                "text": f"Hello {d['User']}, you have {d['Days']} days left to reset your password. -IT"
            }
        )
        response_list.append(resp)
    # 给已过期用户发送提醒
    for d in expired_users:
        resp = requests.post(
            "https://api.mailgun.net/v3/MYDOMAIN/messages",
            auth=("api", "MAILGUN_API_KEY"),
            data={
                "from": "IT <mailgun@MYDOMAIN>",
                "to": d['Email'],
                "subject": "Password Reminder",
                "text": f"Hello {d['User']}, your password has expired, please change it asap. -IT"
            }
        )
        response_list.append(resp)
    return response_list

send_email()

修复方案2:使用Mailgun批量个性化发信功能

Mailgun支持类似Twilio的批量传参发送能力,通过recipient-variables参数一次提交所有收件人和对应个性化变量,仅需一次接口请求,适合用户量较大的场景,也不会暴露所有收件人邮箱:

import requests
import json

def send_batch_email():
    to_list = []
    recipient_vars = {}
    # 拼接未过期用户信息
    for d in notify_users:
        user_email = d['Email']
        to_list.append(user_email)
        recipient_vars[user_email] = {
            "user": d['User'],
            "notice_content": f"you have {d['Days']} days left to reset your password."
        }
    # 拼接已过期用户信息
    for d in expired_users:
        user_email = d['Email']
        to_list.append(user_email)
        recipient_vars[user_email] = {
            "user": d['User'],
            "notice_content": "your password has expired, please change it asap."
        }
    # 调用批量发信接口
    return requests.post(
        "https://api.mailgun.net/v3/MYDOMAIN/messages",
        auth=("api", "MAILGUN_API_KEY"),
        data={
            "from": "IT <mailgun@MYDOMAIN>",
            "to": to_list,
            "subject": "Password Reminder",
            "text": "Hello %recipient.user%, %recipient.notice_content% -IT",
            "recipient-variables": json.dumps(recipient_vars)
        }
    )

send_batch_email()

两种方案都可以实现每个用户收到对应个性化内容的需求。

内容的提问来源于stack exchange,提问作者troy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:57:07