Почему я не могу отправлять электронные письма нескольким получателям с помощью этого скрипта? - PullRequest
1 голос
/ 25 января 2012

Почему я не могу отправлять электронные письма нескольким получателям с помощью этого скрипта?

Я не получаю ни ошибок, ни отказов, и первый получатель получает электронное письмо. Ни один из других не делает.

Сценарий:

#!/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 ]

7 голосов
/ 25 января 2012

Точки с запятой не являются правильным разделителем для адресов в заголовках получателей. Вы должны использовать запятые.

РЕДАКТИРОВАТЬ: теперь я вижу, что вы используете библиотеку неправильно. Вы предоставляете строку, которая всегда будет интерпретироваться как один адрес. Вы должны предоставить список адресов для отправки нескольким получателям.

1 голос
/ 25 января 2012

Получатели в стандартном заголовке должны быть разделены запятыми, а не точками с запятой.Я обвиняю Microsoft Outlook в том, что он заставил людей поверить в обратное.

0 голосов
/ 31 июля 2013

В качестве альтернативы

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

, если ваши получатели представляют собой строку адресов, разделенных точкой с запятой.

0 голосов
/ 31 июля 2013

Измените это в своем коде:

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

headers = ",".join(headers)

session.sendmail(sender, recipient.split(","), headers + "\r\n\r\n" + body)
0 голосов
/ 25 января 2012

Вы можете просто поместить электронные письма в массив и пройтись по массиву для каждого электронного письма следующим образом: (мой питон ржавый ... так что простите мой синтаксис)

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...