2016-12-09 34 views
0

我寫了一個小的Python程序,在該程序中,我發送電子郵件給.csv文件中的接收者。Python 3中的克羅地亞字符

import csv 
import smtplib 

f = open('output.csv') 
csv_f = csv.reader(f) 
email=[] 
for row in csv_f: 
    if row: 
     email.append(row[2]) 

fromaddr = MY MAIL 
toaddrs = email 
subject = 'Čestitamo!' 
text = 'ččšpšžćčđšđ' 
msg = 'Subject: %s\n\n%s' % (subject, text) 


username = MY_USER 
password = MY_PASS 


try: 
    server = smtplib.SMTP('smtp.gmail.com:587') 

    server.starttls() 
    server.login(username,password) 
    server.sendmail(fromaddr, email, msg) 
    server.quit() 
    print('Mail sent!') 
except Exception as e: 
    print("ERROR!") 
    print(e) 

計劃這樣給出錯誤:「ASCII」編解碼器不能編碼字符「\ u010c」在位置9:在範圍序數不

試圖以編碼爲UTF-8,所述郵件發送,但我得到這個:

Äestitamo! ÄäÅ«pÅ»ÅÄÄÄÄÄÄÄÄÅÅÅ''

然後我嘗試在很多方面解碼,但我無法得到正確的克羅地亞字母č,ć,ž,š,đ。

我應該怎麼做才能發送正確的克羅地亞信件?

編輯

改了行:

server.sendmail(fromaddr, email, msg.encode("windows-1250")) 

現在我已經和zS正確的!

對於C我有è,對於C我有℃,爲DJ我有d

+0

使用Python 3,對不起,忘了告訴 – omicito

+0

所以你有這樣的然後呢? –

+0

čćđ仍然需要,所以沒有 – omicito

回答

2

你將不得不使用MIME模塊發送包含非純ASCII字符的消息。如果你是消息的base64編碼罰款,你可以簡單地使用email.mime.text.MIMEText

msg = email.mime.text.MIMEText('nččšpšžćčđšđ',_charset='utf8') 
msg.add_header('Subject', 'Čestitamo!') 
server.send_message(msg, fromaddr, email) 

如果你不喜歡郵件正文base64編碼,你將不得不使用一個email.mime.MIMENonMultipart和明確地設置的標頭和編碼體:

msg = email.mime.nonmultipart.MIMENonMultipart('text', 'plain') 
msg.add_header('Content-Transfer-Encoding', '8bits') 
msg.add_header('Charset', 'utf8') 
msg.add_header('Subject', 'Čestitamo!') 
msg.set_payload('ččšpšžćčđšđ'.encode('utf8')) 
server.send_message(msg, fromaddr, email) 

注:我在這裏使用utf8編碼,但這種方法可以使用任何其他編碼能夠代表克羅地亞字符...

+0

看起來就是這樣!謝謝! – omicito