2014-02-19 2 views
0

Я написал ниже код для отправки электронной почты на несколько адресов .... Но я могу отправить почту только для первого адреса в списке ... мог бы дать мне точная причина и решение. Заранее спасибо!!Отправить электронное письмо с приложением для нескольких адресов в python

from email.mime.text import MIMEText 
from email.mime.application import MIMEApplication 
from email.mime.multipart import MIMEMultipart 
from smtplib import SMTP 
COMMASPACE = ', ' 

msg = MIMEMultipart() 
msg['Subject'] = 'Test attaching mail' 
msg['From'] = '[email protected]' 
msg['Reply-to'] = '' 
msg['To'] = COMMASPACE.join(['[email protected]','[email protected]','[email protected]']) 

# That is what u see if dont have an email reader: 
msg.preamble = 'Multipart massage.\n' 

# This is the textual part: 
part = MIMEText("Hello im sending an email from a python program") 
msg.attach(part) 

# This is the binary part(The Attachment): 
file="../logs_usecase/TestUsecase.log" 
part = MIMEApplication(open(file,"rb").read()) 
part.add_header('Content-Disposition', 'attachment', filename=file) 
msg.attach(part) 

# Create an instance in SMTP server 
smtp = SMTP("smtp.gmail.com:587") 
# Start the server: 
smtp.starttls() 
smtp.ehlo() 
smtp.login('[email protected]', "xxxxx") 

# Send the email 
smtp.sendmail(msg['From'], msg['To'], msg.as_string()) 
+0

Ну, учитывая, что вы используете 'SMTP', вы могли бы просто разделить адреса на цикл, потому что в [...]:' и отправить его вручную, потому что это то, что произойдет в любом случае если я не ошибаюсь. SMTP не распознает несколько адресов, клиент обычно разбивает их перед отправкой. Или я просто использовал действительно старые почтовые серверы при отладке :) – Torxed

+0

@Torxed SMTP, безусловно, поддерживает обращение к одному сообщению нескольким получателям ([RFC 5321, стр. 35] (http://tools.ietf.org/html/rfc5321# стр. 35)) – lanzz

+0

@lanzz Yepp, извините! Смешайте концы на почтовом сервере, а входящие сообщения электронной почты могут быть адресованы несколькими пунктами назначения, но редко являются почтовыми серверами, достаточно умными, чтобы их ограничить при отправке. – Torxed

ответ

0

SMTP.sendmail ожидает a list of recipients, но вы передаете строку с каскадными адресами электронной почты:

SMTP.sendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options])

Отправить почту. Необходимыми аргументами являются строка из адресной строки RFC 822, Список строк с номером RFC 822 (голая строка будет рассматриваться как список с 1 адресом) и строку сообщения.

(курсив)

Вы должны пройти один и тот же список, присоединиться с COMMASPACE непосредственно SMTP.sendmail вместо передачи сцепленной плоской строки.

Смежные вопросы