为什么我不能用这个脚本向多个收件人发送邮件?

2 投票
5 回答
5031 浏览
提问于 2025-04-17 11:01

我为什么不能用这个脚本给多个收件人发邮件呢?

我没有收到任何错误信息,也没有退信,只有第一个收件人收到了邮件,其他人都没有。

这个脚本是:

#!/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()

5 个回答

0

你可以这样做,只需把电子邮件放在一个数组里,然后对数组中的每个电子邮件进行循环处理,就像下面这样:

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

在标准的邮件头中,收件人之间必须用逗号分隔,而不是用分号。我觉得这是因为微软的Outlook让大家误以为可以用分号。

8

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

补充说明:我现在明白你在错误地使用这个库。你提供了一个字符串,这样会一直被当作一个单独的地址来处理。你需要提供一个地址列表,这样才能发送给多个收件人。

撰写回答