From ecb3d3f56d1c9f0c288fc3c99f49b85ceb59f06d Mon Sep 17 00:00:00 2001 From: Aleksas Pielikis Date: Mon, 28 Jan 2019 08:52:28 +0200 Subject: [PATCH] feat(email): Allow emails to be sent without SMTP authentication by setting (#6816) * Add email_account option to disable SMTP Authentication. * Partially reverting email_account.py changes. Unnecessary incoming_server logic was added. * Codacy code style issue fix. * Suppress 'Password is required or select Awaiting Password' message if only smtp is used an no athentication is required. * Suppress 'Password is required or select Awaiting Password' message if only smtp is used an no athentication is required. * Simplified logic. * Reverted excessive changes. * fix: remove description and make label clear --- .../doctype/email_account/email_account.json | 35 ++++++++++++++++++- .../doctype/email_account/email_account.py | 5 +-- frappe/email/smtp.py | 13 ++++--- 3 files changed, 45 insertions(+), 8 deletions(-) diff --git a/frappe/email/doctype/email_account/email_account.json b/frappe/email/doctype/email_account/email_account.json index 61167f9f63..b306692739 100644 --- a/frappe/email/doctype/email_account/email_account.json +++ b/frappe/email/doctype/email_account/email_account.json @@ -1130,6 +1130,39 @@ "translatable": 0, "unique": 0 }, + { + "allow_bulk_edit": 0, + "allow_in_quick_entry": 0, + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "default": "0", + "fieldname": "no_smtp_authentication", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Disable SMTP server authentication", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "translatable": 0, + "unique": 0 + }, { "allow_bulk_edit": 0, "allow_in_quick_entry": 0, @@ -1566,4 +1599,4 @@ "track_changes": 1, "track_seen": 0, "track_views": 0 -} \ No newline at end of file +} diff --git a/frappe/email/doctype/email_account/email_account.py b/frappe/email/doctype/email_account/email_account.py index 591c755777..a2c9ead506 100755 --- a/frappe/email/doctype/email_account/email_account.py +++ b/frappe/email/doctype/email_account/email_account.py @@ -72,7 +72,7 @@ class EmailAccount(Document): if self.enable_outgoing: self.check_smtp() else: - if self.enable_incoming or self.enable_outgoing: + if self.enable_incoming or (self.enable_outgoing and not self.no_smtp_authentication): frappe.throw(_("Password is required or select Awaiting Password")) if self.notify_if_unreplied: @@ -134,8 +134,9 @@ class EmailAccount(Document): port = cint(self.smtp_port), use_tls = cint(self.use_tls) ) - if self.password: + if self.password and not self.no_smtp_authentication: server.password = self.get_password() + server.sess def get_incoming_server(self, in_receive=False, email_sync_rule="UNSEEN"): diff --git a/frappe/email/smtp.py b/frappe/email/smtp.py index 1794c8215d..549b3f1d1e 100644 --- a/frappe/email/smtp.py +++ b/frappe/email/smtp.py @@ -88,7 +88,7 @@ def get_outgoing_email_account(raise_exception_not_set=True, append_to=None, sen if email_account: if email_account.enable_outgoing and not getattr(email_account, 'from_site_config', False): raise_exception = True - if email_account.smtp_server in ['localhost','127.0.0.1']: + if email_account.smtp_server in ['localhost','127.0.0.1'] or email_account.no_smtp_authentication: raise_exception = False email_account.password = email_account.get_password(raise_exception=raise_exception) email_account.default_sender = email.utils.formataddr((email_account.name, email_account.get("email_id"))) @@ -170,11 +170,14 @@ class SMTPServer: self.email_account = get_outgoing_email_account(raise_exception_not_set=False, append_to=append_to, sender=sender) if self.email_account: self.server = self.email_account.smtp_server - self.login = getattr(self.email_account, "login_id", None) or self.email_account.email_id - if self.email_account.ascii_encode_password: - self.password = frappe.safe_encode(self.email_account.password, 'ascii') + self.login = (getattr(self.email_account, "login_id", None) or self.email_account.email_id) + if not self.email_account.no_smtp_authentication: + if self.email_account.ascii_encode_password: + self.password = frappe.safe_encode(self.email_account.password, 'ascii') + else: + self.password = self.email_account.password else: - self.password = self.email_account.password + self.password = None self.port = self.email_account.smtp_port self.use_tls = self.email_account.use_tls self.sender = self.email_account.email_id