-
- Downloads
[FIX] mail_thread: save attachment from mail in same encoding
Steps to reproduce: - Configure incoming mail server and set it to create X record on incoming mails (X can be any model with a chatter) - Create a CSV file and set the encoding to UTF-16 - Send the CSV file through Gmail to the Odoo instance - Go to model X and open the created record - In the chatter, click/download the CSV file - Open the downloaded file with Geany (or any file editor that can show the file encoding) Issue: The file encoding is not the same as the original file (utf-8 instead of utf-16). Working with Outlook. Cause: The difference between Outlook and Gmail is that Gmail provides the charset of the file. The content of the mail is retrieved using `email` python lib. The lib will try to retrieve the charset of the file and fallback on `ASCII` if not available, then return the decode content. ```python def get_text_content(msg, errors='replace'): content = msg.get_payload(decode=True) charset = msg.get_param('charset', 'ASCII') return content.decode(charset, errors=errors) ``` Example: content = b'd\x00a\x00,\x00,\x00,\......' Outlook: charset = 'ASCII' return => 'd\x00a\x00,\x00,\x00...' Gmail: charset = 'UTF-16LE' return => 'da,,,,,\n,,,,,\....' In the post process of the attachment, the content is encoded in 'utf-8' (to then encoded in base64) before creating the attachment record. Content encoded to 'utf-8': Outlook: b'd\x00a\x00,\x00,\x00...' Gmail: b'da,,,,,\n,,,,,\n....' Therefore, when writing the file on the disk, the encoding is based on the binary content. Solution: When parsing the mail, add the encoding charset to the `info` variable. Then, when creating the attachment, use the charset in `info` (or fallback on 'utf'8' if no charset set) to encode the content. opw-3089009 closes odoo/odoo#118384 X-original-commit: 7874c388 Signed-off-by:Nicolas Lempereur (nle) <nle@odoo.com> Signed-off-by:
Nasreddin Boulif (bon) <bon@odoo.com>
Showing
- addons/mail/models/mail_thread.py 11 additions, 7 deletionsaddons/mail/models/mail_thread.py
- addons/test_mail/data/test_mail_data.py 33 additions, 0 deletionsaddons/test_mail/data/test_mail_data.py
- addons/test_mail/tests/test_mail_gateway.py 18 additions, 0 deletionsaddons/test_mail/tests/test_mail_gateway.py
Loading
Please register or sign in to comment