2015-04-15 7 views
4

Я имеющие большие проблемы со временем с этим issue-- другого вопроса о том, так что не решить ее здесь: Send Raw Email (with attachment) to Multiple RecipientsBoto SES - send_raw_email() несколько получателей

Моего код (который работает) просто :

def send_amazon_email_with_attachment(html, subject, now, pre): 
    dummy = '[email protected]' 
    recipients = ['[email protected]', '[email protected]', '[email protected]'] 
    connS3 = S3Connection('IDENTIFICATION','PASSWORD') 
    b = connS3.get_bucket('BUCKET_NAME') 
    key = b.get_key('FILE_NAME.pdf') 
    temp = key.get_contents_as_string() 

    msg = MIMEMultipart('alternative') 
    msg['Subject'] = subject 
    msg['From'] = 'My Name <[email protected]>'   

    msg.preamble = 'Multipart message.\n' 

    part1 = MIMEText(u"Attached is the report", 'plain') 
    part2 = MIMEText(html, 'html') 

    msg.attach(part1) 
    msg.attach(part2) 

    part = MIMEApplication(temp) #read binary 
    part.add_header('Content-Disposition', 'attachment', filename='FILE_NAME.pdf') 
    msg.attach(part) 

    conn = boto.ses.connect_to_region('us-east-1', aws_access_key_id='AUTH_ID', aws_secret_access_key='AUTH_PW') 
    for recipient in recipients: 
     print recipient 
     msg['To'] = recipient 

     result = conn.send_raw_email(msg.as_string(), source=msg['From'], destinations=recipient) 

но, есть предостережение ... это цикл для каждого получателя. Любые вариации этого не работают. Передача списка в msg['Bcc'] или msg['BCC'] вернет ошибку, которую список не может удалить (такая же точная ошибка, что и размещенный вопрос). Передача строки, разделенной запятыми, дает вопрос SAS от Amazon, говорящий «Незаконная электронная почта» в возвращаемом XML. Потому что я только получаю ошибку от Amazon в конкретных ситуациях, я убежден, что это ошибка с программой, прежде чем она ударит по их вызову API.

У любого MIMEMultipart у экспертов есть идеи?

+0

Я считаю, что то, о чем вы просите, должно быть возможным, хотя у меня нет времени собрать полный пример на данный момент. Посмотрите, как пакет django-ses [реализует send_messages()] (https://github.com/hmarr/django-ses/blob/master/django_ses/__init__.py#L157), который способен быстро отправлять сообщения в длинный списки получателей. Редактировать: на самом деле, может быть, нет - я вижу, что send_messages() на самом деле зацикливается на списке email_messages. –

+2

Вы можете отправить нескольким получателям, если вы перечислите получателей 'cc' и 'bcc' с получателем 'to'. См. Http://stackoverflow.com/questions/9974972/mails-not-being-sent-to-people-in-cc – xbonez

ответ

9

В основном вам необходимо указать получателей электронной почты в двух разных местах, используя 2 разных формата.

def send_amazon_email_with_attachment(html, subject, now, pre): 
    dummy = '[email protected]' 
    recipients = ['[email protected]', '[email protected]', '[email protected]'] 
    connS3 = S3Connection('IDENTIFICATION','PASSWORD') 
    b = connS3.get_bucket('BUCKET_NAME') 
    key = b.get_key('FILE_NAME.pdf') 
    temp = key.get_contents_as_string() 

    msg = MIMEMultipart('alternative') 
    msg['Subject'] = subject 
    msg['From'] = 'My Name <[email protected]>' 
    msg['To'] = ', '.join(recipients) 


    msg.preamble = 'Multipart message.\n' 

    part1 = MIMEText(u"Attached is the report", 'plain') 
    part2 = MIMEText(html, 'html') 

    msg.attach(part1) 
    msg.attach(part2) 

    part = MIMEApplication(temp) #read binary 
    part.add_header('Content-Disposition', 'attachment', filename='FILE_NAME.pdf') 
    msg.attach(part) 

    conn = boto.ses.connect_to_region('us-east-1', aws_access_key_id='AUTH_ID', aws_secret_access_key='AUTH_PW') 


    result = conn.send_raw_email(msg.as_string(), source=msg['From'], destinations=recipients) 
Смежные вопросы