smtplib:为什么“收件人”字段中的收件人会收到两次邮件?

时间:2016-08-04 05:15:05

标签: python sendmail smtplib

我搜索了很多这个,但无法解决我的脚本中的问题。最后,我决定将它发布在这里。

以下是代码段:

fromaddr = "someValidAddress@xyz.com"
cc = ['SomeEmailAlias@xyz.com']
toaddr = ""
    msg = MIMEMultipart()
    toaddrlist = list(toaddr.split(',')) #As sendmail() accepts the list of recipients only in list form.
    toaddrlist += (cc,)
    msg['From'] = fromaddr
    msg['To'] = toaddr
    msg['Cc'] = ', '.join(cc)
    msg['Date'] = formatdate(localtime=True)
    msgHtml = MIMEText(html, 'html')
    msg.attach(msgHtml)
    msg['Subject'] = "Test mail"
    server = "someMailServer.xyz.com"
    smtp = smtplib.SMTP(server, 25)
    smtp.sendmail(fromaddr, toaddrlist, msg.as_string())
    smtp.close() #Close the SMTP server connection.

我知道并且我已经确保msg ['To']接受字符串值(toaddr),而sendmail()中的toaddrlist应该是一个列表。

Catch:如果我删除了行toaddrlist += (cc,),则邮件不会在“收件人”字段中两次发送给收件人,但邮件不会传递到抄送别名。

请帮忙。

1 个答案:

答案 0 :(得分:0)

评估一行toaddrlist += (cc,)时,您案例中toaddrlist的值为:

["", ["SomeEmailAlias@xyz.com"]]

这是错误的,因为toaddrlist必须是字符串列表,而不是包含某些列表的列表。

所以解决方案是改变:

 toaddrlist += (cc,)

toaddrlist += cc

或推荐形式(pythonic方式):

toaddrlist.extend(cc)