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

时间:2015-06-13 21:25:06

标签: 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.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 :(")

无论出于何种原因,我的电子邮件只会转到我的收件人列表中的第一个收件人(TO函数中的test_email()变量。

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

知道为什么会这样吗?我怀疑它与之有关:

", ".join(TO)

我设置了message变量。

注意:我的test_email()主要基于最受欢迎的答案:

How to send an email with Gmail as provider using Python?

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

  

主题:当前CSA排名6/13/15

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

EDIT_2:我不认为我的问题与以下内容重复:

How to send email to multiple recipients using python smtplib?

因为,虽然我使用smtplib.sendmail()功能,但我根本不使用电子邮件模块,因此我们的代码非常不同......

1 个答案:

答案 0 :(得分:1)

我能够通过在登录服务器后迭代收件人列表来完成此操作。

像这样的东西

# A tibble: 2 x 4
         pinid t0_t1 t0_t2 t1_t2
*       <fctr> <dbl> <dbl> <dbl>
1 CP_South_1_1    -2    -5    -3
2 CP_South_1_2    -1    -5    -4

然后迭代列表

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