title: How do I setup Airflow's email configuration to send an email on errors?
body: <p>I'm trying to make an Airflow task intentionally fail and error out by passing in a Bash line (<code>thisshouldnotrun</code>) that doesn't work. Airflow is outputting the following:</p>
  
  <pre><code>[2017-06-15 17:44:17,869] {bash_operator.py:94} INFO - /tmp/airflowtmpLFTMX7/run_bashm2MEsS: line 7: thisshouldnotrun: command not found
  [2017-06-15 17:44:17,869] {bash_operator.py:97} INFO - Command exited with return code 127
  [2017-06-15 17:44:17,869] {models.py:1417} ERROR - Bash command failed
  Traceback (most recent call last):
    File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/models.py", line 1374, in run
      result = task_copy.execute(context=context)
    File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/operators/bash_operator.py", line 100, in execute
      raise AirflowException("Bash command failed")
  AirflowException: Bash command failed
  [2017-06-15 17:44:17,871] {models.py:1433} INFO - Marking task as UP_FOR_RETRY
  [2017-06-15 17:44:17,878] {models.py:1462} ERROR - Bash command failed
  Traceback (most recent call last):
    File "/home/ubuntu/.local/bin/airflow", line 28, in &lt;module&gt;
      args.func(args)
    File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/bin/cli.py", line 585, in test
      ti.run(ignore_task_deps=True, ignore_ti_state=True, test_mode=True)
    File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/utils/db.py", line 53, in wrapper
      result = func(*args, **kwargs)
    File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/models.py", line 1374, in run
      result = task_copy.execute(context=context)
    File "/home/ubuntu/.local/lib/python2.7/site-packages/airflow/operators/bash_operator.py", line 100, in execute
      raise AirflowException("Bash command failed")
  airflow.exceptions.AirflowException: Bash command failed
  </code></pre>
  
  <p>Will Airflow send an email for these kind of errors? If not, what would be the best way to send an email for these errors?</p>
  
  <p>I'm not even sure if <code>airflow.cfg</code> is setup properly... Since the ultimate goal is to test the email alerting notification, I want to make sure airflow.cfg is setup properly. Here's the setup:</p>
  
  <pre><code>[email]
  email_backend = airflow.utils.email.send_email_smtp
  
  
  [smtp]
  # If you want airflow to send emails on retries, failure, and you want to use
  # the airflow.utils.email.send_email_smtp function, you have to configure an
  # smtp server here
  smtp_host = emailsmtpserver.region.amazonaws.com 
  smtp_starttls = True
  smtp_ssl = False
  # Uncomment and set the user/pass settings if you want to use SMTP AUTH
  # smtp_user = airflow_data_user
  # smtp_password = password
  smtp_port = 587 
  smtp_mail_from = airflow_data_user@domain.com
  </code></pre>
  
  <p>What is <code>smtp_starttls</code>? I can't find any info for it in the documentation or online. If we have 2-factor authentication needed to view emails, will that be an issue here for Airflow?</p>
  
  <p>Here's my Bash command:</p>
  
  <pre><code>task1_bash_command = """
  export PATH=/home/ubuntu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
  export rundate=`TZ='America/Los_Angeles' date +%F -d "yesterday"`
  export AWS_CONFIG_FILE="/home/ubuntu/.aws/config"
  
  /home/ubuntu/bin/snowsql -f //home/ubuntu/sql/script.sql 1&gt; /home/ubuntu/logs/"$rundate"_dev.log 2&gt; /home/ubuntu/logs/"$rundate"_error_dev.log
  
  if [ -e /home/ubuntu/logs/"$rundate"_error_dev.log ]
  then
      exit 64
  fi
  </code></pre>
  
  <p>And my task:</p>
  
  <pre><code>task1 = BashOperator(
      task_id = 'run_bash',
      bash_command = task1_bash_command,
      dag = dag,
      retries = 2,
      email_on_failure = True,
      email = 'username@domain.com')
  </code></pre>