From ce2a0854db58ff0d03e6a89a2e255874fd794e43 Mon Sep 17 00:00:00 2001 From: "Chinmay D. Pai" Date: Fri, 3 Jan 2020 14:56:15 +0530 Subject: [PATCH] fix(email): safe_encode to avoid smtp ascii encoding issue fixes issue where smtplib fails to encode the mail as ascii Traceback (most recent call last): File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 60, in application response = frappe.api.handle() File "/home/frappe/frappe-bench/apps/frappe/frappe/api.py", line 55, in handle return frappe.handler.handle() File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 22, in handle data = execute_cmd(cmd) File "/home/frappe/frappe-bench/apps/frappe/frappe/handler.py", line 61, in execute_cmd return frappe.call(method, **frappe.form_dict) File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 1042, in call return fn(*args, **newargs) File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/user/user.py", line 801, in reset_password user.reset_password(send_email=True) File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/user/user.py", line 234, in reset_password self.password_reset_mail(link) File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/user/user.py", line 253, in password_reset_mail "password_reset", {"link": link}, now=True) File "/home/frappe/frappe-bench/apps/frappe/frappe/core/doctype/user/user.py", line 298, in send_login_mail delayed=(not now) if now!=None else self.flags.delay_emails, retry=3) File "/home/frappe/frappe-bench/apps/frappe/frappe/__init__.py", line 476, in sendmail inline_images=inline_images, header=header, print_letterhead=print_letterhead) File "/home/frappe/frappe-bench/apps/frappe/frappe/email/queue.py", line 162, in send print_letterhead=print_letterhead) File "/home/frappe/frappe-bench/apps/frappe/frappe/email/queue.py", line 185, in add send_one(email_queue.name, now=True) File "/home/frappe/frappe-bench/apps/frappe/frappe/email/queue.py", line 475, in send_one raise e File "/home/frappe/frappe-bench/apps/frappe/frappe/email/queue.py", line 415, in send_one smtpserver.sess.sendmail(email.sender, recipient.recipient, message) File "/usr/lib64/python3.6/smtplib.py", line 855, in sendmail msg = _fix_eols(msg).encode('ascii') UnicodeEncodeError: 'ascii' codec can't encode characters in position 335-339: ordinal not in range(128) Signed-off-by: Chinmay D. Pai --- frappe/email/queue.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frappe/email/queue.py b/frappe/email/queue.py index 4a0a34c76e..62b0d9ea3f 100755 --- a/frappe/email/queue.py +++ b/frappe/email/queue.py @@ -6,7 +6,7 @@ import frappe import sys from six.moves import html_parser as HTMLParser import smtplib, quopri, json -from frappe import msgprint, _, safe_decode +from frappe import msgprint, _, safe_decode, safe_encode from frappe.email.smtp import SMTPServer, get_outgoing_email_account from frappe.email.email_body import get_email, get_formatted_html, add_attachment from frappe.utils.verified_command import get_signed_params, verify_request @@ -563,7 +563,7 @@ def prepare_message(email, recipient, recipients_list): print_format_file.update({"parent": message}) add_attachment(**print_format_file) - return message.as_string() + return safe_encode(message.as_string()) def clear_outbox(): """Remove low priority older than 31 days in Outbox and expire mails not sent for 7 days.