with mail.connect() as conn:
for user in selectemail:
message1 = request.form['htmltext']
sender='garni.kh@gmail.com'
subject = "hello, %s " %user[1]
msg = Message(recipients=[user[0]],
html=message1,
subject=subject,
sender=sender
)
conn.send(msg)
当我在我的html中使用时,这段代码运行良好
<h1>فونت فارسی</h1>
我在Flask中有这个错误:
builtins.UnicodeEncodeError
UnicodeEncodeError: 'ascii' codec can't encode character '\u0633' in position 659: ordinal not in range(128)
这是烧瓶中的完整错误:
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\_compat.py", line 33, in reraise
raise value
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\_compat.py", line 33, in reraise
raise value
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "d:\Python33\lib\site-packages\flask-0.10-py3.3.egg\flask\app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "D:\contact\contactweb\flaskapp.py", line 160, in gotomailing
conn.send(msg)
File "d:\Python33\lib\site-packages\flask_mail.py", line 168, in send
message.as_string())
File "d:\Python33\lib\smtplib.py", line 745, in sendmail
msg = _fix_eols(msg).encode('ascii')
答案 0 :(得分:0)
根本问题是,当您将str
({2}上的unicode
)传递给smtplib.sendmail
时,字符串将被编码为bytes
为ASCII。当你传入的只是ASCII字符时一切正常,但是一旦传入一组非ASCII字符(如فونتفارسی),你就会得到编码错误。
修复只是自己将消息编码为字节,提供正确的编码:
msg = Message(recipients=[user[0]],
html=message1.encode("utf-8"),
subject=subject,
sender=sender
)
message1.encode("utf-8")
会将unicode str
转换为bytes
的流,表示UTF-8编码中的那些字符。当smtplib.sendmail
检查消息内容时,它将看到它已经是一个字节流,并且不会再次尝试对其进行编码(从而解决您的问题)。