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

5
我尝试从 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...

有人知道该怎么做吗?
非常感谢!
6个回答

35

这个问题已经有了部分答案,但并没有完全解决。对于我来说,问题在于"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() )

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

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


2

需要一个真正的列表。因此,在文件中使用以下内容:

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

你可以做

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

2
sendmail 函数需要一个地址列表,而您却传递了一个字符串。 如果文件中的地址格式符合您所说的,在这种情况下,您可以使用 eval() 将其转换为列表。

1

sendmail函数调用中的to_addrs实际上是所有收件人(to、cc、bcc)的字典,而不仅仅是to。

在提供所有收件人的功能调用时,您还需要将相同类型的收件人列表作为逗号分隔的字符串格式发送到msg中。(to、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())

0
urlFile = open("mailList.txt", "r")

list=[]        #create an empty list

for line in urlFile.readlines():
    x=line.strip()
    list.append(x)

print(list)

1
感谢您为Stack Overflow社区做出的贡献。这可能是一个正确的答案,但如果您能提供代码的额外解释,让开发人员能够理解您的推理过程,那将非常有用。对于不太熟悉语法或难以理解概念的新开发人员来说,这尤其有帮助。您是否可以编辑您的答案,包含更多细节,以造福整个社区? - Jeremy Caney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接