2016-08-04 2 views
0

Я искал об этом довольно много, но не смог исправить проблему в моем скрипте. Поэтому, наконец, я решил опубликовать его здесь.smtplib: Почему получатели в поле «Кому» получают почту дважды?

Вот фрагмент кода:

fromaddr = "[email protected]" 
cc = ['[email protected]'] 
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. 

Я знаю, и я заверил, что сообщ [ «To»] принимает значение строки (toaddr), в то время как toaddrlist в Sendmail() должен быть список ,

Поймать: Если я удалю строку toaddrlist += (cc,), тогда почта не будет доставлена ​​дважды получателям в поле «Кому», но почта не будет доставлена ​​на псевдоним Cc.

Пожалуйста, помогите.

ответ

0

Когда линия toaddrlist += (cc,) вычисляется значение toaddrlist в вашем случае:

["", ["[email protected]"]] 

и это неправильно, потому что toaddrlist должен быть список строк, а не список, содержащий несколько списков.

Таким образом, решение является изменение:

toaddrlist += (cc,) 

в

toaddrlist += cc 

или рекомендуемой форме (вещий путь):

toaddrlist.extend(cc) 
+0

Спасибо Ахмеду, но ни один из исправлений похоже, устраняет проблему. Я все еще получаю письмо дважды. Чтобы узнать, что может быть не так, я напечатал значения 'toaddr' и' toaddrlist', и они являются 'somemail @ xyz.com' и' [u'[email protected] ', [email protected] '] 'соответственно в обоих случаях. –

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