更新: Gmail が受信メールを自動転送している場合、コードでは表示されないメールの元のヘッダーが保持されることがわかりましたが、エラーが発生します。これで、ヘッダーを取得できました。Ascii 以外の電子メールヘッダーが原因で例外が発生しないようにするにはどうすればよいですか? . 無視できる解決策も大歓迎です!
元の投稿: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position... に関するこの厄介な問題があります。多くの人が同様の質問をしたので、私は多くのことを試しましたが、ここでは解決策はありません。このコードは、非 ASCII でうまく機能します。
import logging
import webapp2
from google.appengine.ext.webapp.mail_handlers import InboundMailHandler
from google.appengine.api import mail
class LogSenderHandler(InboundMailHandler):
def receive(self, mail_message):
tobesent = mail_message.subject
logging.info(mail_message.subject)
logging.info(mail_message.date)
tobesent = ''.join(c for c in tobesent if c.isdigit())
mail.send_mail(
sender="senderaddress@gmail.com",
to="receiveraddress@gmail.com",
subject="hello bello",
body= "fontos informacio: " + str(tobesent)
)
app = webapp2.WSGIApplication([LogSenderHandler.mapping()], debug=True)
GAE ログに表示されるエラーは次のとおりです。
'ascii' codec can't decode byte 0xc3 in position 18: ordinal not in range(128)
Traceback (most recent call last):
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1535, in __call__
rv = self.handle_exception(request, response, e)
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1529, in __call__
rv = self.router.dispatch(request, response)
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/python27_runtime/python27_lib/versions/third_party/webapp2-2.5.2/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/python27_runtime/python27_lib/versions/1/google/appengine/ext/webapp/mail_handlers.py", line 69, in post
self.receive(mail.InboundEmailMessage(self.request.body))
File "/python27_runtime/python27_lib/versions/1/google/appengine/api/mail.py", line 743, in __init__
self.update_from_mime_message(mime_message)
File "/python27_runtime/python27_lib/versions/1/google/appengine/api/mail.py", line 1305, in update_from_mime_message
super(InboundEmailMessage, self).update_from_mime_message(mime_message)
File "/python27_runtime/python27_lib/versions/1/google/appengine/api/mail.py", line 1214, in update_from_mime_message
super(EmailMessage, self).update_from_mime_message(mime_message)
File "/python27_runtime/python27_lib/versions/1/google/appengine/api/mail.py", line 1094, in update_from_mime_message
subject = _decode_and_join_header(mime_message['subject'], separator=u'')
File "/python27_runtime/python27_lib/versions/1/google/appengine/api/mail.py", line 559, in _decode_and_join_header
for s, c in email.header.decode_header(header))
File "/python27_runtime/python27_lib/versions/1/google/appengine/api/mail.py", line 559, in <genexpr>
for s, c in email.header.decode_header(header))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 18: ordinal not in range(128)
.encode('utf8')
or decode.encode('utf8')
、またはunicoded = unicode(non_unicode_string, source_encoding)
source_encoding が「cp1252」、「iso-8859-1」などのインターネットで見つかったすべてのソリューションを試し、これを出力に送信しました(ダニエル・ベックによる)ので、これが重複はありませんが、解決策は何ですか?何も機能しません。
これが何が起こっているかです: 自動化された電子メールを Gmail アカウントに受信し、(フィルター設定で) me@myapp.appspotmail.com に自動的に転送します。電子メールには、件名にも本文にも áéíőűöüó 文字が含まれています。それが問題だ。それはすべてを失敗させるでしょう。Gmail の送信メール設定を試してみました 送信メッセージに Unicode (UTF-8) エンコードを使用します。これは、メールを手動で転送する場合にのみ機能します。
app.yaml の場合:
application: myappid
version: 1
runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /favicon\.ico
static_files: favicon.ico
upload: favicon\.ico
- url: /_ah/mail/myaddress@myappid.appsportmail.com
script: myappid.app
login: admin
- url: /.*
script: myappid.app
inbound_services:
- mail
libraries:
- name: webapp2
version: "2.5.2"