You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by cr...@apache.org on 2017/01/06 00:19:49 UTC
incubator-airflow git commit: [AIRFLOW-734] Fix SMTP auth regression
when not using user/pass
Repository: incubator-airflow
Updated Branches:
refs/heads/master 794540f95 -> a6b148149
[AIRFLOW-734] Fix SMTP auth regression when not using user/pass
Closes #1974 from criccomini/AIRFLOW-734
Project: http://git-wip-us.apache.org/repos/asf/incubator-airflow/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-airflow/commit/a6b14814
Tree: http://git-wip-us.apache.org/repos/asf/incubator-airflow/tree/a6b14814
Diff: http://git-wip-us.apache.org/repos/asf/incubator-airflow/diff/a6b14814
Branch: refs/heads/master
Commit: a6b148149ae6301e83d191bd9e03a4c0e7b2c2f3
Parents: 794540f
Author: Chris Riccomini <ch...@wepay.com>
Authored: Thu Jan 5 16:19:39 2017 -0800
Committer: Chris Riccomini <ch...@wepay.com>
Committed: Thu Jan 5 16:19:39 2017 -0800
----------------------------------------------------------------------
airflow/configuration.py | 5 +++--
airflow/utils/email.py | 11 +++++++++--
tests/core.py | 15 +++++++++++++++
3 files changed, 27 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/a6b14814/airflow/configuration.py
----------------------------------------------------------------------
diff --git a/airflow/configuration.py b/airflow/configuration.py
index 9a1c48c..1f2eafa 100644
--- a/airflow/configuration.py
+++ b/airflow/configuration.py
@@ -280,9 +280,10 @@ email_backend = airflow.utils.email.send_email_smtp
smtp_host = localhost
smtp_starttls = True
smtp_ssl = False
-smtp_user = airflow
+# Uncomment and set the user/pass settings if you want to use SMTP AUTH
+# smtp_user = airflow
+# smtp_password = airflow
smtp_port = 25
-smtp_password = airflow
smtp_mail_from = airflow@airflow.com
http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/a6b14814/airflow/utils/email.py
----------------------------------------------------------------------
diff --git a/airflow/utils/email.py b/airflow/utils/email.py
index c4906fd..f55fe10 100644
--- a/airflow/utils/email.py
+++ b/airflow/utils/email.py
@@ -31,6 +31,7 @@ from email.mime.application import MIMEApplication
from email.utils import formatdate
from airflow import configuration
+from airflow.exceptions import AirflowConfigException
def send_email(to, subject, html_content, files=None, dryrun=False, cc=None, bcc=None, mime_subtype='mixed'):
@@ -87,10 +88,16 @@ def send_email_smtp(to, subject, html_content, files=None, dryrun=False, cc=None
def send_MIME_email(e_from, e_to, mime_msg, dryrun=False):
SMTP_HOST = configuration.get('smtp', 'SMTP_HOST')
SMTP_PORT = configuration.getint('smtp', 'SMTP_PORT')
- SMTP_USER = configuration.get('smtp', 'SMTP_USER')
- SMTP_PASSWORD = configuration.get('smtp', 'SMTP_PASSWORD')
SMTP_STARTTLS = configuration.getboolean('smtp', 'SMTP_STARTTLS')
SMTP_SSL = configuration.getboolean('smtp', 'SMTP_SSL')
+ SMTP_USER = None
+ SMTP_PASSWORD = None
+
+ try:
+ SMTP_USER = configuration.get('smtp', 'SMTP_USER')
+ SMTP_PASSWORD = configuration.get('smtp', 'SMTP_PASSWORD')
+ except AirflowConfigException:
+ logging.debug("No user/password found for SMTP, so logging in with no authentication.")
if not dryrun:
s = smtplib.SMTP_SSL(SMTP_HOST, SMTP_PORT) if SMTP_SSL else smtplib.SMTP(SMTP_HOST, SMTP_PORT)
http://git-wip-us.apache.org/repos/asf/incubator-airflow/blob/a6b14814/tests/core.py
----------------------------------------------------------------------
diff --git a/tests/core.py b/tests/core.py
index c85be2d..da6f597 100644
--- a/tests/core.py
+++ b/tests/core.py
@@ -2108,6 +2108,21 @@ class EmailSmtpTest(unittest.TestCase):
@mock.patch('smtplib.SMTP_SSL')
@mock.patch('smtplib.SMTP')
+ def test_send_mime_noauth(self, mock_smtp, mock_smtp_ssl):
+ configuration.conf.remove_option('smtp', 'SMTP_USER')
+ configuration.conf.remove_option('smtp', 'SMTP_PASSWORD')
+ mock_smtp.return_value = mock.Mock()
+ mock_smtp_ssl.return_value = mock.Mock()
+ utils.email.send_MIME_email('from', 'to', MIMEMultipart(), dryrun=False)
+ assert not mock_smtp_ssl.called
+ mock_smtp.assert_called_with(
+ configuration.get('smtp', 'SMTP_HOST'),
+ configuration.getint('smtp', 'SMTP_PORT'),
+ )
+ assert not mock_smtp.login.called
+
+ @mock.patch('smtplib.SMTP_SSL')
+ @mock.patch('smtplib.SMTP')
def test_send_mime_dryrun(self, mock_smtp, mock_smtp_ssl):
utils.email.send_MIME_email('from', 'to', MIMEMultipart(), dryrun=True)
assert not mock_smtp.called