2
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')
4

1 に答える 1

-1

根本的な問題は、str( unicodePython 2 で) を文字列に渡すと、ASCII としてsmtplib.sendmailエンコードされることです。bytesASCII 文字のみを渡すとすべてが機能しますが、ASCII 以外の文字のセットを渡すと (たとえば、フォノット ファースシーなど)、エンコード エラーが発生します。

修正は、正しいエンコーディングを提供して、メッセージを自分でバイトにエンコードするだけです。

msg = Message(recipients=[user[0]],
              html=message1.encode("utf-8"),
              subject=subject,
              sender=sender
              )

message1.encode("utf-8")、UnicodeをUTF-8 エンコーディングでこれらの文字を表すstrストリームに変換します。bytesメッセージの内容をチェックするsmtplib.sendmailと、それはすでにバイトのストリームであり、再度エンコードしようとしないことがわかります (したがって、問題が修正されます)。

于 2013-11-27T03:37:25.527 に答える