modoboa / modoboa-webmail

The webmail of Modoboa
MIT License
73 stars 48 forks source link

Can't open an email with a 'To' field which contains an accent #177

Closed Toniob closed 5 years ago

Toniob commented 5 years ago

Hi,

If you try to open an email with an accent in one of the addresses of the 'to' field, you'll get a 500 error. Here is the stacktrace

DjangoUnicodeDecodeError at /webmail/
'ascii' codec can't decode byte 0xe9 in position 14: ordinal not in range(128). You passed in b'<xxx@xxxaf\xe9-cr\xe9ationxxx.fr>,...' (<class 'bytes'>)

Request Method: GET
Request URL: https://domain.name/webmail/?action=viewmail&mbox=INBOX&mailid=xxxx
Django Version: 1.11.9
Python Executable: /usr/bin/uwsgi-core
Python Version: 3.5.3
Python Path: ['.', '', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/directory/lib/python3.5/site-packages', '/directory/src/caldav']
Server time: mar, 9 Oct 2018 09:07:14 +0200
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.sites',
 'django.contrib.staticfiles',
 'reversion',
 'ckeditor',
 'ckeditor_uploader',
 'rest_framework',
 'rest_framework.authtoken',
 'modoboa',
 'modoboa.core',
 'modoboa.lib',
 'modoboa.admin',
 'modoboa.transport',
 'modoboa.relaydomains',
 'modoboa.limits',
 'modoboa.parameters',
 'modoboa_sievefilters',
 'modoboa_webmail',
 'modoboa_radicale',
 'modoboa_stats',
 'modoboa_dmarc',
 'modoboa_postfix_autoreply',
 'webpack_loader')
Installed Middleware:
('x_forwarded_for.middleware.XForwardedForMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.locale.LocaleMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
 'modoboa.core.middleware.LocalConfigMiddleware',
 'modoboa.lib.middleware.AjaxLoginRedirect',
 'modoboa.lib.middleware.CommonExceptionCatcher',
 'modoboa.lib.middleware.RequestCatcherMiddleware')

Traceback:  

File "/directory/lib/python3.5/site-packages/django/utils/encoding.py" in force_text
  74.                     s = six.text_type(s, encoding, errors)

      During handling of the above exception ('ascii' codec can't decode byte 0xe9 in position 14: ordinal not in range(128)), another exception occurred:

File "/directory/lib/python3.5/site-packages/django/core/handlers/exception.py" in inner
  41.             response = get_response(request)

File "/directory/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/directory/lib/python3.5/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/usr/lib/python3.5/contextlib.py" in inner
  30.                 return func(*args, **kwds)

File "/directory/lib/python3.5/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "/directory/lib/python3.5/site-packages/modoboa/admin/lib.py" in wrapped_f
  41.                 return f(request, *args, **kwargs)

File "/directory/lib/python3.5/site-packages/modoboa_webmail/views.py" in index
  625.         response = globals()[action](request)

File "/directory/lib/python3.5/site-packages/modoboa_webmail/views.py" in viewmail
  559.     email.fetch_headers()

File "/directory/lib/python3.5/site-packages/modoboa_webmail/lib/imapemail.py" in fetch_headers
  77.             hdrvalue = self.get_header(msg, label, raw=raw_addresses)

File "/directory/lib/python3.5/site-packages/modoboa_webmail/lib/imapemail.py" in get_header
  97.         hdrvalue = super(ImapEmail, self).get_header(msg, hdrname)

File "/directory/lib/python3.5/site-packages/modoboa/lib/email_utils.py" in get_header
  132.                             for v, e in email.header.decode_header(msg[header])

File "/directory/lib/python3.5/site-packages/modoboa/lib/email_utils.py" in <listcomp>
  132.                             for v, e in email.header.decode_header(msg[header])

File "/directory/lib/python3.5/site-packages/django/utils/encoding.py" in smart_text
  41.     return force_text(s, encoding, strings_only, errors)

File "/directory/lib/python3.5/site-packages/django/utils/encoding.py" in force_text
  88.             raise DjangoUnicodeDecodeError(s, *e.args)

Exception Type: DjangoUnicodeDecodeError at /webmail/
Exception Value: 'ascii' codec can't decode byte 0xe9 in position 14: ordinal not in range(128). You passed in b'<xxx@xxxaf\xe9-cr\xe9ationxxx.fr>,...' (<class 'bytes'>)
Request information:
USER: anthony@xxx

GET:
mailid = 'xxxx'
mbox = 'INBOX'
action = 'viewmail'

POST: No POST data

FILES: No FILES data

You're seeing this error because you have DEBUG = True in your
Django settings file. Change that to False, and Django will
display a standard page generated by the handler for this status code.