使用Python smtplib从.txt文件向多个收件人发送电子邮件

时间:2011-08-04 12:57:36

标签: python email

我尝试将邮件从python发送到多个电子邮件地址,从.txt文件导入,我尝试了不同的语法,但没有什么可行的...

代码:

s.sendmail('sender@mail.com', ['recipient@mail.com', 'recipient2@mail.com', 'recipient3@mail.com'], msg.as_string())

所以我尝试从.txt文件中导入收件人地址:

urlFile = open("mailList.txt", "r+")
mailList = urlFile.read()
s.sendmail('sender@mail.com', mailList, msg.as_string())

mainList.txt包含:

['recipient@mail.com', 'recipient2@mail.com', 'recipient3@mail.com']

但它不起作用......

我也尝试过:

... [mailList] ... in the code, and '...','...','...' in the .txt file, but also no effect

... [mailList] ... in the code, and ...','...','... in the .txt file, but also no effect...

有谁知道该怎么做?

非常感谢!

5 个答案:

答案 0 :(得分:34)

这个问题已得到回答,但并未完全解决。对我来说,问题是“To:”标题希望将电子邮件作为字符串,而sendmail函数希望它在列表结构中。

# list of emails
emails = ["banjer@example.com", "slingblade@example.com", "dude@example.com"]

# Use a string for the To: header
msg['To'] = ', '.join( emails )

# Use a list for sendmail function
s.sendmail(from_email, emails, msg.as_string() )

答案 1 :(得分:3)

urlFile = open("mailList.txt", "r+")
mailList = [i.strip() for i in urlFile.readlines()]

并将每个收件人放在自己的上(即与换行符分开)。

答案 2 :(得分:2)

sendmail函数需要一个地址列表,你传递一个字符串。

如果文件中的地址按您的说法格式化,您可以使用eval()将其转换为列表。

答案 3 :(得分:2)

它需要是一个真实的清单。所以,在文件中有这个:

recipient@mail.com,recipient2@mail.com,recipient3@mail.com

你可以做到

mailList = urlFile.read().split(',')

答案 4 :(得分:0)

sendmail函数调用中的

to_addrs实际上是所有收件人(to,cc,bcc)的字典,而不仅仅是。

在功能调用中提供所有收件人时,还需要在msg中发送相同收件人的列表,作为每种类型收件人的逗号分隔字符串格式。 (到,CC,BCC)。但是你可以很容易地做到这一点,但要维护单独的列表并组合成字符串或将字符串转换成列表。

以下是示例

TO = "1@to.com,2@to.com"
CC = "1@cc.com,2@cc.com"
msg['To'] = TO
msg['CC'] = CC
s.sendmail(from_email, TO.split(',') + CC.split(','), msg.as_string())

TO = ['1@to.com','2@to.com']
CC = ['1@cc.com','2@cc.com']
msg['To'] = ",".join(To)
msg['CC'] = ",".join(CC)
s.sendmail(from_email, TO+CC, msg.as_string())