2016-12-29 78 views
0

我使用python腳本發送多個收件人郵件,並且它可以工作,但在郵件的「收件人」中,該字段爲空。在我試過的每個郵件提供商上。Python2.7發送郵件,爲什麼msg ['To']保持空白?

這裏是我的代碼:

def send_mail(self, server, send_from, subject, attach, foo=None, bar=None) 
    msg = MIMEMultipart() 
    msg['From'] = send_from 
    msg['Subject'] = subject 

    body = u"""<html> My Body </html>""" 

    #Attach file pdf 
    msg.attach(MIMEText(body, 'html', 'utf-8')) 
    filename = 'fname.pdf' 
    attachment = open(attach, "rb") 
    part = MIMEBase('application', 'octet-stream') 
    part.set_payload((attachment).read()) 
    encoders.encode_base64(part) 
    part.add_header('Content-Disposition', "attachment; filename = %s" % filename) 
    msg.attach(part) 

    text = msg.as_string() 

    if foo != None and bar != None: 
     recipients = ["[email protected]", "[email protected]"] 
     msg['To'] = ", ".join(recipients) 
     server.sendmail(send_from, recipients, text) 
    else: 
     msg['To'] = "[email protected]" 
     server.sendmail(send_from, msg['To'], text) 
    sleep(1) 

味精[「要」]應該是在我的郵件,但它保持爲空「到」。 (即使在只有一個收件人的「其他」中)。我在現有的問題上找不到任何幫助,所以我來請求你的幫助。

回答

0

根據文檔,第二個參數是收件人列表。你需要改變你的線路

server.sendmail(send_from, msg['To'], text) 

server.sendmail(send_from, [msg['To']], text) 
+0

對於「if」的第一個塊,var收件人是一個列表,所以我發送列表(並且問題仍然出現在郵件中的「To」)。對於第二塊我只有一個收件人,我還需要給出一個元素的列表?我只用一個收件人完成了很多類似的腳本,我查了一下,我沒有給出一個列表。 –

+0

嗨,對不起。我錯誤地理解了你的問題,所以我的回答是錯誤的。我將刪除這個答案,因爲它的誤導。 – Ymartin

0

終於找到了:

text = msg.as_string()應assignement到msg['To']後進行,以便它會出現在我的ifelse塊中庸之道前server.sendmail(send_from, msg['To'], text),因爲所有寫在郵件中的信息,甚至'To'和'From'都在第三個參數text中。