我正在尝试发送群发邮件。
以下是群发邮件文档:Just a link to the Django Docs
为了达到这个目的,我需要创建这个元组:
datatuple = (
('Subject', 'Message.', 'from@example.com', ['john@example.com']),
('Subject', 'Message.', 'from@example.com', ['jane@example.com']),
)
我在ORM中查询了一些收件人的详细信息。然后我会想到有一些循环涉及,每次添加另一个收件人到元组。除了用户名和电子邮件之外,邮件的所有元素都是相同的。
到目前为止,我有:
recipients = notification.objects.all().values_list('username','email')
# this returns [(u'John', u'john@example.com'), (u'Jane', u'jane@example.com')]
for recipient in recipients:
to = recipient[1] #access the email
subject = "my big tuple loop"
dear = recipient[0] #access the name
message = "This concerns tuples!"
#### add each recipient to datatuple
send_mass_mail(datatuple)
我一直在尝试这样的事情: SO- tuple from a string and a list of strings
答案 0 :(得分:4)
如果我理解正确,理解就很简单了。
emails = [
(u'Subject', u'Message.', u'from@example.com', [address])
for name, address in recipients
]
send_mass_mail(emails)
请注意,我们利用Python将tuple
解包为一组命名变量的能力。对于recipients
的每个元素,我们将其第0个元素分配给name
,将其第一个元素分配给address
。因此,在第一次迭代中,name
为u'John'
,address
为u'john@example.com'
。
如果您需要根据名称更改'Message.'
,可以使用字符串格式或您选择的任何其他格式/模板机制来生成消息:
emails = [
(u'Subject', u'Dear {}, Message.'.format(name), u'from@example.com', [address])
for name, address in recipients
]
由于以上是列表推导,因此emails
为list
。如果真的需要这个tuple
而不是list
,那也很简单:
emails = tuple(
(u'Subject', u'Message.', u'from@example.com', [address])
for name, address in recipients
)
对于这个,我们实际上将生成器对象传递给tuple
构造函数。这具有使用生成器的性能优势,而没有创建中间list
的开销。你可以在Python中任何可以接受迭代参数的地方做到这一点。
答案 1 :(得分:1)
这里需要进行一些清理:
1)实际上在循环中构建元组(这有点棘手,因为你需要额外的逗号来确保附加元组而不是元组中的值)
2)将send_mass_mail调用移出循环
这应该是有效的代码:
cocoa
编辑: jpmc26的技术肯定更有效率,如果你计划发送一个大的电子邮件列表,你应该使用它。很可能你应该使用对你个人最有意义的代码,这样当你的需求发生变化时,你可以很容易地理解如何更新。