Отправить письмо нескольким получателям из файла .txt с помощью Python smtplib - PullRequest
5 голосов
/ 04 августа 2011

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

код:

s.sendmail('sender@mail.com', ['recipient@mail.com', 'recipient2@mail.com', 'recipient3@mail.com'], msg.as_string())

Итак, я попытался импортировать адреса получателей из файла .txt:

urlFile = open("mailList.txt", "r+")
mailList = urlFile.read()
s.sendmail('sender@mail.com', mailList, msg.as_string())

Файл mainList.txt содержит:

['recipient@mail.com', 'recipient2@mail.com', 'recipient3@mail.com']

Но это не работает ...

Я также пытался сделать:

... [mailList] ... in the code, and '...','...','...' in the .txt file, but also no effect

и

... [mailList] ... in the code, and ...','...','... in the .txt file, but also no effect...

Кто-нибудь знает, что делать?

Большое спасибо!

Ответы [ 5 ]

34 голосов
/ 10 ноября 2011

На этот вопрос вроде как ответили, но не полностью. Для меня проблема в том, что заголовок «To:» хочет, чтобы электронные письма были в виде строки, а функция sendmail - в структуре списка.

# list of emails
emails = ["banjer@example.com", "slingblade@example.com", "dude@example.com"]

# Use a string for the To: header
msg['To'] = ', '.join( emails )

# Use a list for sendmail function
s.sendmail(from_email, emails, msg.as_string() )
3 голосов
/ 04 августа 2011
urlFile = open("mailList.txt", "r+")
mailList = [i.strip() for i in urlFile.readlines()]

и поместите каждого получателя в отдельную строку (т. Е. Разделите ее строкой).

2 голосов
/ 04 августа 2011

Это должен быть реальный список.Итак, с этим в файле:

recipient@mail.com,recipient2@mail.com,recipient3@mail.com

вы можете сделать

mailList = urlFile.read().split(',')
2 голосов
/ 04 августа 2011

Функция sendmail требует список адресов, вы передаете ему строку.

Если адреса в файле отформатированы так, как вы сказали, вы можете использовать eval() для преобразования его в список.

0 голосов
/ 20 июня 2013

to_addrs в вызове функции sendmail на самом деле является словарем всех получателей (to, cc, bcc), а не только to.

Предоставляя всех получателей в функциональном вызове, вам также необходимо отправить список тех же получателей в сообщении в виде строкового формата через запятую для каждого типа получателей. (К, куб.см, ОЦК). Но вы можете сделать это легко, но поддерживая отдельные списки и объединяя их в строки или преобразовывая строки в списки.

Вот примеры

TO = "1@to.com,2@to.com"
CC = "1@cc.com,2@cc.com"
msg['To'] = TO
msg['CC'] = CC
s.sendmail(from_email, TO.split(',') + CC.split(','), msg.as_string())

или

TO = ['1@to.com','2@to.com']
CC = ['1@cc.com','2@cc.com']
msg['To'] = ",".join(To)
msg['CC'] = ",".join(CC)
s.sendmail(from_email, TO+CC, msg.as_string())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...