[英]Python: Sending Email to Multiple Recipients
我正在尝试使用 Python 向多人发送电子邮件。
def getRecipients(fileWithRecipients):
recipients = []
f = open(fileWithRecipients, 'r')
for line in f:
recipients.append(line)
return recipients
def test_email():
gmail_user = "csarankings@gmail.com"
gmail_pass = getPassword("pass.txt")
FROM = "csarankings@gmail.com"
TO = getRecipients("recipients.txt")
date = getCurrentDate()
SUBJECT = "Current CSA Rankings: " + date
TEXT = createEmailMessageFromFile("rankings.txt")
message = """\From: %s\nTo: %s\nSubject: %s\n\n%s """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
try:
server = smtplib.SMTP("smtp.gmail.com", 587)
server.ehlo()
server.starttls()
server.login(gmail_user, gmail_pass)
server.sendmail(FROM, TO, message)
server.close()
print("it worked")
except:
print("it failed :(")
无论出于何种原因,我的电子邮件只会发送给我的收件人列表中的第一个收件人(我的test_email()
函数中的TO
变量。
我的收件人文件每行只包含一个电子邮件地址(目前只有两个)。 我认为我的 getRecipients() 函数可能有问题,所以我只是将两封电子邮件硬编码到TO
变量中,它适用于第一个电子邮件地址而不是第二个。
知道为什么会发生这种情况吗? 我怀疑它与以下内容有关:
", ".join(TO)
我在哪里设置我的message
变量。
注意:我的test_email()
主要基于这里最受好评的答案:
如何使用 Python 以 Gmail 作为提供商发送电子邮件?
编辑:对于它的价值,当我将单个电子邮件地址的列表硬编码到 TO 变量中时,主题在电子邮件中正确显示。 当我使用 getRecipients() 函数时(即使recipients.txt 文件中只有一个电子邮件地址),它会在电子邮件正文中显示:
主题:当前 CSA 排名 6/13/15
不确定是否相关,但认为它可能与问题有关。
EDIT_2:我不认为我的问题是重复的:
如何使用 python smtplib 向多个收件人发送电子邮件?
因为,虽然我使用smtplib.sendmail()
函数,但我根本不使用 email 模块,所以我们的代码非常不同......
我能够通过在登录到服务器后遍历收件人列表来做到这一点。
像这样的东西
try:
server = smtplib.SMTP("smtp.gmail.com", 587)
server.ehlo()
server.starttls()
server.login(gmail_user, gmail_pass)
print('Login successful')
except:
print('Login unsuccessful')
然后遍历列表
for item in List:
TO = item
FROM = gmail_user
#message as defined above
try:
server.sendmail(FROM, TO, message)
except:
print('not sent for' + item)
server.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.