Hello everyone!

We had an implicit consensus about removing the email/SMTP integration from
Airflow Core and replacing it with the SMTP provider and SmtpNotifier. This
change will simplify Airflow's core, improve maintainability, and provide a
more consistent experience with other providers. Now is the best moment to
do this before Airflow 3.0.

All the Airflow configurations in the *smtp* section are supported in the
SMTP connection, so removing the whole section should have minimal impact
on users. The migration effort is expected to be very low.

This thread focuses on how best to handle the configurations currently in
the email section, mainly:

   -

   *default_email_on_failure*
   -

   *default_email_on_retry*
   -

   *email_backend*
   -

   *email_conn_id*

The other configurations could be replaced by connection extras.

Options for handling email configuration:

   -

   Option 1: Complete Removal

   -

      Remove the entire email section from the Airflow configuration.
      -

      Remove the *email_on_failure* and *email_on_retry* arguments from
      BaseOperator.
      -

      Implications:
      -

         Users will need to explicitly define notifiers (using
         on_*_callbacks) for any task that requires email notifications.
         -

         There will be no built-in mechanism for default email
         notifications.
         -

         This offers the most significant simplification of Airflow's core
         but may increase the effort required to configure email alerts.
         -

   Option 2: Replacement Configurations

   -

      Introduce new configuration options:
      -

         *default_notification_on_failure*: (boolean) Enables default
         notifications on task failure.
         -

         *default_notification_on_retry*: (boolean) Enables default
         notifications on task retry.
         -

         *default_notifier*: (string) Specifies a method that initializes
         and returns the default notifier.
         -

      Replace *email_on_failure* and *email_on_retry* in BaseOperator with
      *notify_on_failure* and *notify_on_retry*, which would default to the
      values set in the new configuration options.
      -

      Replace the old email handling behavior by simply adding the notifier
      to the corresponding callback.
      -

      Implications:
      -

         Preserve the concept of default notifications while moving away
         from the mail-specific configuration.
         -

         Support other notification types and send notifications by default.
         -

         Requires introducing new configuration options and modifying
         BaseOperator.
         -

   Option 3: Dedicated Notification Connection

   -

      Create a new connection (of any type) with a specific and reserved
      name for notifications (e.g., *notifications_connection*).
      -

      This connection would have extras to configure the notifier and
      specify whether to send notifications by default.
      -

      Implications:
      -

         Provides a centralized and extensible way to manage all
         notification settings without Airflow configuration.
         -

         Allows users to easily switch between different notification
         methods and send notifications by default.
         -

         May require more initial setup for users but offers greater
         flexibility in the long term.
         -

         Require more dev on our side.

Regarding migration, a fully automated migration might not be possible in
all cases because of the need to migrate Airflow configurations, we will
provide comprehensive documentation and examples to assist users in
transitioning their email configurations.

I'm interested in hearing your thoughts and any other suggestions you may
have.

P.S: I have created an almost ready-to-merge PR for option 1 (
https://github.com/apache/airflow/pull/46041)

Reply via email to