2017-03-16 22 views
0

当发送大量电子邮件回复此错误554, Transaction failed: Duplicate header subject。我使用smtplib + aws SES。对于所有消息,标题必须相同。我该如何解决这个错误?如果发送消息没有主题,所有工作。如何解决“554,交易失败:重复标题'主题'”?

import smtplib 
import json 


from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

args = [] 
msg = MIMEMultipart('alternative') 
msg['From'] = '[email protected]' 
html = open('mail.html').read() 


EMAIL_HOST = 'email-smtp...' 
EMAIL_HOST_USER = 'sss' 
EMAIL_HOST_PASSWORD = 'ssssss' 
EMAIL_PORT = 587 

def lambda_handler(event, context): 
    body = event['Records'][0]['Sns']['Message'] 
    global args 
    args = json.loads(body)['args'] 
    set_worker(json.loads(body)['method'])() 

    return 'success' 


def set_worker(method): 
    return { 
       'email'   : email 
      }.get(method, 'Not found') 


def email(): 
    global msg, html 

    name = args[0] 
    title   = args[1] 
    msg_body  = args[2] 
    email   = args[3] 
    url   = args[4] 
    subject  = "Test" 

    msg['Subject'] = subject 
    msg['To'] = email 

    html = html.format(title, community_name, title, msg_body, community_name) 
    mime_text = MIMEText(html, 'html') 
    msg.attach(mime_text) 
    send_message() 

def send_message(): 
    mail = smtplib.SMTP(EMAIL_HOST, EMAIL_PORT) 
    mail.ehlo() 
    mail.starttls() 
    mail.login(EMAIL_HOST_USER, EMAIL_HOST_PASSWORD) 
    mail.sendmail(msg['From'], msg['To'], msg.as_string()) 
+0

问题是具有相同主题的多条消息......它是一条消息中的两个主题标题。检查'msg.as_string()'的结果,它应该变得清楚到底发生了什么。 –

+0

@ michael-sqlbot请你详细说明一下吗? – Andy

+0

记录'msg.as_string()'返回的值。这是一封电子邮件,完整形成并准备好通过电子邮件发送出去,包含标题和正文,与在Gmail中查看邮件时看到的内容相同,然后单击“显示原始” - 即低级别表示形式消息采用用于传输的格式。这个错误似乎表明电子邮件标题包含两个'Subject:'行而不是一个,这将是错误的。编辑失败电子邮件的'msg.as_string()'输出到问题中。 –

回答

0

当使用aws-lambda时不能使用全局变量。错误在于重复消息被写入变量msg