On September 15, 2026, all Cloud Composer 1 versions and versions 2.0.x of Cloud Composer 2 will reach their planned end of life. You will not be able to use environments with these versions. We recommend planning migration to Cloud Composer 3. Cloud Composer 2 versions 2.1.x and later are still supported and are not impacted by this change.
This page explains how to configure SMTP services for your
Cloud Composer environment.
Before you begin
If your Cloud Composer environment is
configured for Private IP, make sure that it has
connectivity to the API endpoint for your external email service (such as
https://api.sendgrid.com, or your preferred SMTP server).
Configure SendGrid email services
To receive notifications, configure your environment variables
to send email through the SendGrid email service.
Sign up with SendGrid
If you haven't already, sign up with SendGrid in Google Cloud console, click
Manage On Provider to go to the SendGrid domain, and click Settings to retrieve
your username and to create an API key. As a Google Cloud developer, you can
start with 12,000 free emails per month.
Configure the email address for SendGrid. It's not possible to set up the
email address through a secret. Instead, override the
following Airflow configuration option:
Section
Key
Value
email
from_email
The From email address, such as noreply@example.com.
Store values in Airflow
Override the following Airflow configuration options:
LOCATION: the region where the environment is located.
USERNAME: the SendGrid username.
SENDGRID_API_KEY: the SendGrid API key.
Configure the email address for SendGrid. It's not possible to set up the
email address through a secret. Instead, override the
following Airflow configuration option:
Section
Key
Value
email
from_email
The From email address, such as noreply@example.com.
Test your SendGrid configuration
To test SendGrid configuration:
Create a test DAG that uses the EmailOperator. For example:
importdatetimeimportairflowfromairflow.operators.emailimportEmailOperatorwithairflow.DAG("composer_sample_sendgrid",start_date=datetime.datetime(2022,1,1),)asdag:task_email=EmailOperator(task_id="send-email",conn_id="sendgrid_default",# You can specify more than one recipient with a list.to="user@example.com",subject="EmailOperator test for SendGrid",html_content="This is a test message sent through SendGrid.",dag=dag,)
Upload the DAG to your environment and check that
the task succeeds.
Sign in to SendGrid in with your SendGrid credentials.
In the SendGrid UI, go to Activity page.
Search the list for the email. You should see that SendGrid processed
and delivered the email.
If the email is not processed and delivered:
Check your SendGrid configuration.
Verify that you enabled the Secret Manager backend. Make
sure that you granted extra permissions and set overrides for Airflow
configuration options.
Check the spam filter in your email client.
Configure third-party SMTP services
To send email through a third-party SMTP service,
override the email_backend Airflow configuration option
and configure other SMTP-related parameters.
To configure a third-party SMTP service, override the following Airflow configuration options:
Section
Key
Value
email
email_backend
airflow.utils.email.send_email_smtp
smtp
smtp_host
The hostname for the SMTP server.
smtp
smtp_user
The username on the SMTP server.
smtp
smtp_port
The port for the SMTP server. Port 25 is not available. You can use other ports, such as standard SMTP ports 465 and 587.
smtp
smtp_password
Setting a password via smtp_password is not supported. To set an SMTP password, follow instructions provided in Configuring an SMTP password.
smtp
smtp_mail_from
The From email address, such as noreply-composer@.
smtp
smtp_starttls
For enhanced security, set to True.
smtp
smtp_ssl
For enhanced security, set to True.
Configure an SMTP password for a third-party SMTP service
Keeping an SMTP password in plain text in Airflow configuration file is a bad
security practice. That's why Cloud Composer does not support
this method. Instead, you can use two other methods for configuring an SMTP
password.
Using a command to retrieve the SMTP password
You can use a configuration override to specify a command that obtains the
SMTP password. When communicating with your SMTP service, Airflow uses this
command to get the value of the password. Specify a single command, without
bash operators such as pipes and redirects.
To use this method, override the following Airflow
configuration option:
Section
Key
Value
smtp
smtp_password_cmd
Specify a command that returns the SMTP password.
Using a secret stored in Secret Manager to retrieve an SMTP password
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-09-04 UTC."],[[["\u003cp\u003eThis guide provides instructions on configuring SMTP services for Cloud Composer environments, detailing how to set up email notifications.\u003c/p\u003e\n"],["\u003cp\u003eSendGrid is the recommended email service, and users can sign up via the Google Cloud console and use the SendGrid API key to send emails.\u003c/p\u003e\n"],["\u003cp\u003eThere are two ways to store the SendGrid API key and connection details: in Secret Manager (recommended, available from Airflow 2.1.4) or directly in Airflow, in which the latter is not as secure.\u003c/p\u003e\n"],["\u003cp\u003eUsers can also configure third-party SMTP services, but directly storing the SMTP password in the Airflow configuration is discouraged for security reasons.\u003c/p\u003e\n"],["\u003cp\u003eFor enhanced security when using third party SMTP, the password should be managed by retrieving it via a command or storing it in Secret Manager, which is the recommended way.\u003c/p\u003e\n"]]],[],null,["# Configure email notifications\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\n[Cloud Composer 3](/composer/docs/composer-3/configure-email \"View this page for Cloud Composer 3\") \\| **Cloud Composer 2** \\| [Cloud Composer 1](/composer/docs/composer-1/configure-email \"View this page for Cloud Composer 1\")\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\n\u003cbr /\u003e\n\nThis page explains how to configure SMTP services for your\nCloud Composer environment.\n\nBefore you begin\n----------------\n\n- If your Cloud Composer environment is\n [configured for Private IP](/composer/docs/composer-2/configure-private-ip), make sure that it has\n connectivity to the API endpoint for your external email service (such as\n `https://api.sendgrid.com`, or your preferred SMTP server).\n\nConfigure SendGrid email services\n---------------------------------\n\nTo receive notifications, configure your environment variables\nto send email through the SendGrid email service.\n\n### Sign up with SendGrid\n\nIf you haven't already, sign up with SendGrid in Google Cloud console, click\nManage On Provider to go to the SendGrid domain, and click Settings to retrieve\nyour username and to create an API key. As a Google Cloud developer, you can\nstart with 12,000 free emails per month.\n\n[Go to SendGrid Email API](https://console.cloud.google.com/marketplace/details/sendgrid-app/sendgrid-email)\n\n### Configure variables\n\nSendGrid uses the API key and a From email address for sending mail. You\ncan provide this information with one of the following options:\n\n- (Recommended)\n [Store values in Secret Manager](#store-secret-manager)\n\n | **Note:** This option is available in Airflow 2.1.4 and later versions. In Airflow versions from 2.1.4 to 2.2.3, you still need to use an environment variable to set the email address, but you can store the SendGrid API key in a secret.\n- [Store values in Airflow](#store-airflow)\n\n | **Caution:** If you use this option, the value for the SendGrid API key is stored in an Airflow connection.\n\n#### Store values in Secret Manager\n\nTo store values in Secret Manager:\n\n1. [Configure Secret Manager](/composer/docs/composer-2/configure-secret-manager) for your\n environment. Make sure to set up permissions and Airflow configuration\n options for the secrets backend.\n\n2. [Override](/composer/docs/composer-2/override-airflow-configurations) the following Airflow configuration options:\n\n3. Create a secret for the SendGrid connection named\n `airflow-connections-sendgrid_default`. Set the secret's value to the\n connection URI. For example:\n\n sendgrid://\u003cusername\u003e:\u003csendgrid_api_key\u003e@smtp.sendgrid.net:587\n\n For more information about storing connections in\n Secret Manager, see\n [Manage Airflow connections](/composer/docs/composer-2/manage-airflow-connections).\n4. Configure the email address for SendGrid. It's not possible to set up the\n email address through a secret. Instead, [override](/composer/docs/composer-2/override-airflow-configurations) the\n following Airflow configuration option:\n\n | **Deprecated:** In Airflow versions 2.1.4 to 2.1.3, set the `SENDGRID_MAIL_FROM` [environment variable](/composer/docs/composer-2/set-environment-variables) instead of overriding the Airflow configuration option.\n\n#### Store values in Airflow\n\n1. [Override](/composer/docs/composer-2/override-airflow-configurations) the following Airflow configuration options:\n\n2. In Airflow, [configure the connection](/composer/docs/composer-2/manage-airflow-connections)\n named `sendgrid_default`. Specify the Sendgrid API key in the connection\n URI. For example:\n\n gcloud composer environments run \u003cvar translate=\"no\"\u003eENVIRONMENT_NAME\u003c/var\u003e \\\n --location \u003cvar translate=\"no\"\u003eLOCATION\u003c/var\u003e \\\n connections add -- \\\n --conn-uri \"sendgrid://\u003cvar translate=\"no\"\u003eUSERNAME\u003c/var\u003e:\u003cvar translate=\"no\"\u003eSENDGRID_API_KEY\u003c/var\u003e@smtp.sendgrid.net:587\" \\\n sendgrid_default\n\n Replace the following:\n - `ENVIRONMENT_NAME`: the name of your environment.\n - `LOCATION`: the region where the environment is located.\n - `USERNAME`: the SendGrid username.\n - `SENDGRID_API_KEY`: the SendGrid API key.\n3. Configure the email address for SendGrid. It's not possible to set up the\n email address through a secret. Instead, [override](/composer/docs/composer-2/override-airflow-configurations) the\n following Airflow configuration option:\n\n | **Deprecated:** In Airflow versions 2.1.4 to 2.1.3, set the `SENDGRID_MAIL_FROM` [environment variable](/composer/docs/composer-2/set-environment-variables) instead of overriding the Airflow configuration option.\n\n### Test your SendGrid configuration\n\nTo test SendGrid configuration:\n\n1. Create a test DAG that uses the `EmailOperator`. For example:\n\n\n import datetime\n\n import airflow\n from airflow.operators.email import EmailOperator\n\n\n with airflow.DAG(\n \"composer_sample_sendgrid\",\n start_date=datetime.datetime(2022, 1, 1),\n ) as dag:\n task_email = EmailOperator(\n task_id=\"send-email\",\n conn_id=\"sendgrid_default\",\n # You can specify more than one recipient with a list.\n to=\"user@example.com\",\n subject=\"EmailOperator test for SendGrid\",\n html_content=\"This is a test message sent through SendGrid.\",\n dag=dag,\n )\n\n1. [Upload the DAG](/composer/docs/composer-2/manage-dags#add) to your environment and check that the task succeeds.\n2. Sign in to SendGrid in with your SendGrid credentials.\n3. In the SendGrid UI, go to Activity page.\n4. Search the list for the email. You should see that SendGrid processed and delivered the email.\n5. If the email is not processed and delivered:\n\n - Check your SendGrid configuration.\n - Verify that you enabled the Secret Manager backend. Make sure that you granted extra permissions and set overrides for Airflow configuration options.\n - Check the spam filter in your email client.\n\nConfigure third-party SMTP services\n-----------------------------------\n\nTo send email through a third-party SMTP service,\n[override](/composer/docs/composer-2/override-airflow-configurations) the `email_backend` Airflow configuration option\nand configure other SMTP-related parameters.\n| **Note:** Using a third-party SMTP service requires setting an SMTP password. Cloud Composer does not support configuring the `smtp_password` because the value is stored in plain text in `airflow.cfg` and considered non-secure. See [Configuring an SMTP password](#smtp_password) to learn about setting an SMTP password in a more secure way.\n\nTo configure a third-party SMTP service, [override](/composer/docs/composer-2/override-airflow-configurations) the following Airflow configuration options:\n\n### Configure an SMTP password for a third-party SMTP service\n\nKeeping an SMTP password in plain text in Airflow configuration file is a bad\nsecurity practice. That's why Cloud Composer does not support\nthis method. Instead, you can use two other methods for configuring an SMTP\npassword.\n\n#### Using a command to retrieve the SMTP password\n\nYou can use a configuration override to specify a command that obtains the\nSMTP password. When communicating with your SMTP service, Airflow uses this\ncommand to get the value of the password. Specify a single command, without\nbash operators such as pipes and redirects.\n\nTo use this method, [override](/composer/docs/composer-2/override-airflow-configurations) the following Airflow\nconfiguration option:\n\n\n#### Using a secret stored in Secret Manager to retrieve an SMTP password\n\nYou can [configure Secret Manager](/composer/docs/composer-2/configure-secret-manager) as your\nAirflow secrets backend.\n| **Note:** If the `smtp_ssl` Airflow configuration option is set to `True` for your environment, then disable this override if you get the `SSL_WRONG_VERSION_NUMBER` error.\n\nOnce you configure Secret Manager for your Composer\nenvironment, you can store an SMTP password in Secret Manager:\n\n1. Create a new secret:\n\n echo -n \"\u003cvar translate=\"no\"\u003eSMTP_PASSWORD\u003c/var\u003e\" | gcloud beta secrets create \\\n airflow-config-smtp-password \\\n --data-file=- \\\n --replication-policy=automatic\n\n Replace `SMTP_PASSWORD` with your SMTP password.\n2. Configure Airflow to obtain the SMTP password from\n Secret Manager. To do so, [override](/composer/docs/composer-2/override-airflow-configurations)\n the following Airflow configuration option:\n\nWhat's next\n-----------\n\n- [Override Airflow configuration options](/composer/docs/composer-2/override-airflow-configurations)\n- [Set environment variables](/composer/docs/composer-2/set-environment-variables)"]]