Updated 2026-10-08

How to Configure SMTP in Grafana for Alert Emails

To send Grafana alert emails, enable the [smtp] section in grafana.ini with host = smtp.bulko.io:587, your Bulko SMTP user and password, a from_address on your domain and startTLS_policy = MandatoryStartTLS, then restart Grafana. In Docker, set the same values with GF_SMTP_* environment variables such as GF_SMTP_HOST.

Hostsmtp.bulko.io
Port587 · 465 · 2525
EncryptionSTARTTLS · SSL
Loginfrom dashboard

Grafana SMTP settings

FieldValue
enabled / GF_SMTP_ENABLEDtrue
host / GF_SMTP_HOSTsmtp.bulko.io:587 (host and port in one value)
user / GF_SMTP_USERYour Bulko SMTP username (smtp_xxxxxxxxxxxxxxxx)
password / GF_SMTP_PASSWORDYour Bulko SMTP password
from_address / GF_SMTP_FROM_ADDRESS[email protected] (a domain you control)
from_name / GF_SMTP_FROM_NAMEGrafana (or any display name)
startTLS_policy / GF_SMTP_STARTTLS_POLICYMandatoryStartTLS for 587 or 2525
skip_verify / GF_SMTP_SKIP_VERIFYfalse

Step-by-step setup

  1. Buy an SMTP package on the Bulko SMTP Relay page and copy the username and password from Dashboard -> SMTP Access.
  2. Open your Grafana config file (/etc/grafana/grafana.ini on Linux packages, or custom.ini in the conf directory of a binary install).
  3. Find the [smtp] section, remove the leading ; from the lines you change, and enter the values from the example below. Note that host includes the port: smtp.bulko.io:587.
  4. Set startTLS_policy = MandatoryStartTLS for port 587 or 2525. For port 465, Grafana uses implicit TLS automatically (host = smtp.bulko.io:465).
  5. If the password contains # or ;, wrap it in triple quotes, otherwise Grafana treats the rest as a comment.
  6. In Docker or Kubernetes, skip the file and pass GF_SMTP_* environment variables instead (the section name and key, uppercased, joined with underscores).
  7. Restart Grafana (systemctl restart grafana-server or restart the container).

grafana.ini ([smtp] section)

[smtp]
enabled = true
host = smtp.bulko.io:587
user = smtp_xxxxxxxxxxxxxxxx
# wrap in triple quotes if the password contains # or ;
password = """YOUR_BULKO_SMTP_PASSWORD"""
from_address = [email protected]
from_name = Grafana
startTLS_policy = MandatoryStartTLS
skip_verify = false

# Docker / Kubernetes equivalent:
# GF_SMTP_ENABLED=true
# GF_SMTP_HOST=smtp.bulko.io:587
# GF_SMTP_USER=smtp_xxxxxxxxxxxxxxxx
# GF_SMTP_PASSWORD=YOUR_BULKO_SMTP_PASSWORD
# [email protected]
# GF_SMTP_FROM_NAME=Grafana
# GF_SMTP_STARTTLS_POLICY=MandatoryStartTLS

Send a test email

In Grafana go to Alerting -> Contact points, create or edit a contact point with the Email integration, enter your address and click Test. A test notification should arrive within a minute.

If it fails, Grafana shows the SMTP error in the UI, and the full message appears in the Grafana server log (/var/log/grafana/grafana.log or docker logs). Invites and password reset emails use the same SMTP settings.

Troubleshooting

ProblemFix
SMTP not configured, check your grafana.ini config file's [smtp] sectionenabled is still false or commented out, or Grafana was not restarted. Remove the ; prefix, set enabled = true and restart.
dial tcp ... i/o timeoutThe server cannot reach the port. Cloud hosts often block outbound SMTP. Use host = smtp.bulko.io:2525 with MandatoryStartTLS, or ask your provider to open 587.
tls: first record does not look like a TLS handshakeTLS mode and port do not match. Use port 587 or 2525 with STARTTLS; use 465 only for implicit TLS.
535 Authentication failedWrong user or password, or the password was cut off at # or ; (wrap it in triple quotes). Copy the credentials again from Dashboard -> SMTP Access. More: https://bulko.io/en/smtp-errors/535/.
554 5.7.1 rejectedBulko's content filter rejected the message. This is rare for alert emails; check that from_address is on your own domain and the template has no suspicious links.
Alert emails go to spamUse a from_address on your domain, verify that domain in Bulko for DKIM alignment, and check SPF at https://bulko.io/en/validators/spf-checker/.

FAQ

Can I configure Grafana SMTP from the web UI?

No. The SMTP server is set only in grafana.ini (or custom.ini) or via GF_SMTP_* environment variables. The UI configures contact points that use it.

What is the environment variable for the Grafana SMTP host?

GF_SMTP_HOST, for example GF_SMTP_HOST=smtp.bulko.io:587. Every key follows GF_<SECTION>_<KEY>, so startTLS_policy becomes GF_SMTP_STARTTLS_POLICY.

Does this work for Grafana Cloud?

This guide is for self-hosted Grafana (OSS or Enterprise), where you control grafana.ini. Grafana Cloud manages its own email delivery.

How many alert emails can I send?

The default limit is 2,000 emails per day per SMTP account, and [email protected] can raise it. Group alerts in notification policies to avoid floods.

How much does it cost?

Bulko SMTP packages are one-time: $5 for 5,000 emails, $15 for 20,000, $30 for 50,000 or $60 for 150,000. Unused emails never expire, which suits low-volume alerting.

Which port should Grafana use?

587 with startTLS_policy = MandatoryStartTLS is the usual choice. Use 465 for implicit TLS, or 2525 if your network blocks the standard ports.

Get SMTP credentials for Grafana

One-time payment by card or crypto, no subscription. Unused emails never expire. 2,000 emails per day per SMTP account.

SMTP Relay 5K: $5 · 5000SMTP Relay 20K: $15 · 20000SMTP Relay 50K: $30 · 50000SMTP Relay 150K: $60 · 150000
See SMTP relay plans

What you can send: Acceptable Use Policy.