首页 > 解决方案 > 通过 Mailgun 将多封电子邮件发送到字典列表

问题描述

我有一个字典列表,我试图在为 Mailgun 发送电子邮件时为“to”参数传递这些字典。像这样:

users = [{'User': entry.name.value, 'Email': entry.mail.value, 'Number': entry.telephoneNumber.value,'Days': days_left.days}]

此外,days_left 只是我做的一些数学运算,减去了他们上次设置密码的时间 - 今天..

days_left = (pwd_expire_date.astimezone(tz=None) - today)

我的功能如下所示:

        def send_email():
            for d in notify_users:
                return 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"})
            for d in expired_users:
                return 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"})
        send_email()

在“to”值中传入字典似乎只允许列表中的第一封电子邮件,这不是我想要的。我一定在做一些语法错误的事情。我知道您可以将每个单独的电子邮件传递到 to 字段,它会以这种方式工作,但是有没有将字典列表传递到 to 字段?此方法在 Twilio API 中有效,用于发送多条短信,但 Mailgun 似乎不喜欢它。

我的脚本用于在用户需要重置密码 30、15、3 天时发送密码提醒。notify_users 是任何仍然有有效密码但只需要提醒的人, expired_users 是任何密码不再有效的人。我想传递的每封电子邮件的名称,以及该特定用户的剩余天数。这样做的语法是正确的,因为我已经发送了测试电子邮件并且它传递了正确的值。我只是未能将字典列表作为 to 参数传递。如果有人有任何见解,那将非常有帮助。

这是我希望得到的预期结果:

each user in the list, for both expired users and users receives a unique email.

'Hello John Apple, you have 15 days left to reset your password. - IT'
'Hello Sandy Cheeks, your password has expired, please change it asap - IT'

标签: pythonmailgun

解决方案


推荐阅读