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.
Grafana SMTP settings
| Field | Value |
|---|---|
| enabled / GF_SMTP_ENABLED | true |
| host / GF_SMTP_HOST | smtp.bulko.io:587 (host and port in one value) |
| user / GF_SMTP_USER | Your Bulko SMTP username (smtp_xxxxxxxxxxxxxxxx) |
| password / GF_SMTP_PASSWORD | Your Bulko SMTP password |
| from_address / GF_SMTP_FROM_ADDRESS | [email protected] (a domain you control) |
| from_name / GF_SMTP_FROM_NAME | Grafana (or any display name) |
| startTLS_policy / GF_SMTP_STARTTLS_POLICY | MandatoryStartTLS for 587 or 2525 |
| skip_verify / GF_SMTP_SKIP_VERIFY | false |
Step-by-step setup
- Buy an SMTP package on the Bulko SMTP Relay page and copy the username and password from Dashboard -> SMTP Access.
- Open your Grafana config file (
/etc/grafana/grafana.inion Linux packages, orcustom.iniin theconfdirectory of a binary install). - Find the
[smtp]section, remove the leading;from the lines you change, and enter the values from the example below. Note thathostincludes the port:smtp.bulko.io:587. - Set
startTLS_policy = MandatoryStartTLSfor port 587 or 2525. For port 465, Grafana uses implicit TLS automatically (host = smtp.bulko.io:465). - If the password contains
#or;, wrap it in triple quotes, otherwise Grafana treats the rest as a comment. - In Docker or Kubernetes, skip the file and pass
GF_SMTP_*environment variables instead (the section name and key, uppercased, joined with underscores). - Restart Grafana (
systemctl restart grafana-serveror 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
| Problem | Fix |
|---|---|
| SMTP not configured, check your grafana.ini config file's [smtp] section | enabled is still false or commented out, or Grafana was not restarted. Remove the ; prefix, set enabled = true and restart. |
| dial tcp ... i/o timeout | The 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 handshake | TLS mode and port do not match. Use port 587 or 2525 with STARTTLS; use 465 only for implicit TLS. |
| 535 Authentication failed | Wrong 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 rejected | Bulko'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 spam | Use 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.
What you can send: Acceptable Use Policy.