Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:向多个收件人发送电子邮件_Python_Email_Smtp - Fatal编程技术网

Python:向多个收件人发送电子邮件

Python:向多个收件人发送电子邮件,python,email,smtp,Python,Email,Smtp,我正在尝试使用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.co

我正在尝试使用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\u email()函数中的
to
变量)

我的收件人文件每行只包含一个电子邮件地址(目前只有两个)。我认为我的getRecipients()函数可能有问题,所以我只是将两封电子邮件硬编码到
TO
变量中,它适用于第一个电子邮件地址,而不是第二个电子邮件地址

知道为什么会发生这种情况吗?我怀疑这与:

", ".join(TO)
在这里,我设置了
消息
变量

注意:我的
test\u email()
主要基于这里投票最多的答案:

编辑:值得一提的是,当我将单个电子邮件地址的列表硬编码到TO变量中时,主题会正确显示在电子邮件中。当我使用getRecipients()函数(即使在recipients.txt文件中只有一个电子邮件地址)时,它会在电子邮件正文中显示:

主题:当前CSA排名2015年6月13日

不确定是否相关,但认为可能与该问题相关

编辑2:我不认为我的问题是重复的:


因为,虽然我使用了
smtplib.sendmail()
函数,但我根本没有使用电子邮件模块,因此我们的代码非常不同……

我可以在登录到服务器后通过迭代收件人列表来实现这一点

像这样的

    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()

@MattDMo的可能重复编辑了我的问题,以回答为什么我不认为我的问题是重复的。你没有抓住要点。你构造
to:
字段的方式不正确。通读所有答案并综合它们所说的内容。也许你应该看看如何使用模块来简化事情。文档的这一部分可能会也很有用。我刚刚发现这就是问题所在。在我看来,API设计在某种意义上是不合逻辑的,它不能帮助我循环使用to。