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

smtplib: Why do the recipients in "To" field receive the mail twice?

我对此进行了很多搜索,但无法解决我的脚本中的问题。所以最后,我决定 post 在这里。

这是代码片段:

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 应该是一个列表。

注意:如果我删除 toaddrlist += (cc,) 行,则邮件不会两次发送到 "To" 字段中的收件人,但邮件不会发送到 Cc 别名。

请帮忙。

当评估行 toaddrlist += (cc,) 时,toaddrlist 在您的情况下的值为:

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

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

所以解决办法就是改:

 toaddrlist += (cc,)

toaddrlist += cc

或推荐的形式(pythonic 方式):

toaddrlist.extend(cc)