2016-04-29 4 views
0

Я получаю следующее сообщение об ошибке при попытке отправить по электронной почте с помощью standard Python exampleUnicodeDecodeError: «ASCII» кодек не может декодировать - Python

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 27: ordinal not in range(128) 

Вот код:

# Import smtplib for the actual sending function 
import smtplib 

# Import the email modules we'll need 
from email.mime.text import MIMEText 

# Open a plain text file for reading. For this example, assume that 
# the text file contains only ASCII characters. 
fp = open(textfile, 'rb') 
# Create a text/plain message 
msg = MIMEText(fp.read()) 
fp.close() 

# me == the sender's email address 
# you == the recipient's email address 
msg['Subject'] = 'The contents of %s' % textfile 
msg['From'] = me 
msg['To'] = you 

# Send the message via our own SMTP server, but don't include the 
# envelope header. 
s = smtplib.SMTP('localhost') 
s.sendmail(me, [you], msg.as_string()) 
s.quit() 

Любые идеи, как преодолеть это?

+0

Какую версию python вы используете? – snakecharmerb

+0

@snakecharmerb Python 2.7, работает через Spyder – user136829

ответ

0

Если юникод не важен для вас, вы можете попробовать следующее:

import unicodedata 

str = fp.read() 
normalized_message = unicodedata.normalize('NFKD', unicode(str, 'utf-8')).encode('ascii','ignore') 
msg = MIMEText(normalized_message) 

Это будет конвертировать все Юникод в ближайший ASCII эквивалент.

+0

Теперь я получаю 'TypeError: должен быть unicode, а не str' – user136829

+0

@ user136829 отредактировал – chrisd1100

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