2

为什么我不能使用此脚本向多个收件人发送电子邮件?

我没有收到任何错误或退回邮件,并且第一个收件人确实收到了电子邮件。其他人都没有。

剧本:

#!/usr/bin/python
import smtplib

SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587

recipient = 'email@domain.com; email2@domain.com;'
sender = 'me@gmail.com'
subject = 'the subject'
body = 'the body'
password = "password"
username = "me@gmail.com"

body = "" + body + ""

headers = ["From: " + sender,
           "Subject: " + subject,
           "To: " + recipient,
           "MIME-Version: 1.0",
           "Content-Type: text/html"]
headers = "\r\n".join(headers)

session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)

session.ehlo()
session.starttls()
session.ehlo
session.login(username, password)

session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
session.quit()
4

5 回答 5

8

分号不是收件人标头中地址的正确分隔符。您必须使用逗号。

编辑:我现在看到您错误地使用了该库。您提供的字符串将始终被解释为单个地址。您必须提供要发送给多个收件人的地址列表。

于 2012-01-24T22:55:44.000 回答
2

标准标题中的收件人必须用逗号分隔,而不是分号。我责怪 Microsoft Outlook 导致人们不相信。

于 2012-01-24T22:55:10.507 回答
0

或者

recipient = ', '.join(recipient.split('; '))

如果您的收件人是一串分号分隔的地址。

于 2013-07-30T23:52:39.103 回答
0

在你的代码中改变它:

recipient = ['email@domain.com','email2@domain.com']

headers = ",".join(headers)

session.sendmail(sender, recipient.split(","), headers + "\r\n\r\n" + body)
于 2013-07-30T23:21:31.160 回答
0

您可以,只需将电子邮件放在一个数组中,然后循环遍历每个电子邮件的数组,如下所示:(我的 python 生锈了......所以请原谅我的语法)

foreach recipient in recipients
    headers = ["From: " + sender, "Subject: " + subject, "To: " + recipient, "MIME-Version: 1.0",  "Content-Type: text/html"]
    headers = "\r\n".join(headers)
    session.sendmail(sender, recipient, headers + "\r\n\r\n" + body)
于 2012-01-24T22:57:00.507 回答