2016-12-09 15 views
0

私は、.csvファイルから受信者に電子メールを送信する小さなPythonプログラムを作成しました。このような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」コーデックは位置9の文字は「\ u010c」をエンコードすることができません:序ない範囲で

メールが送信され、UTF-8としてエンコードしようとしましたしかし、私はこれを得る:

estitamo! ÄÄÅ¡pšžćÄÄ'Å¡Ä「

、私は多くの方法でそれを解読しようとしましたが、私は、適切なクロアチアの手紙C、C、Z、S、のDJ得ることができませんでした。

メールを送信する際に適切なクロアチア文字を使用するにはどうすればよいですか?今私はSと正しいZいる

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

EDIT

のような行を変更しました!私が持っている。©のために、私はæを持っているCについては、私がè持っcに対する

、ð

+0

のpython 3を使用して...私はここにUTF8エンコードを使用しているが、この方法は、他のクロアチア語の文字を表現することができエンコードを使用することができ、申し訳ありませんが、 – omicito

+0

を伝えるのを忘れてだからあなたはそうだその後それを抱きましたか? –

+0

čćđまだ必要なので、いいえ – omicito

答えて

2

あなたは非プレーンなASCII文字を含むメッセージを送信するために、MIMEモジュールを使用する必要があります。あなたがメッセージの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) 

注:

+0

それはそうですね!ありがとう! – omicito

関連する問題