Setup
Step 1
Create a new account on Mailgun
Step 2
In [Sending] click [Domains] then [Add New Domain]. It's recommended to add a subdomain like mail.yourdomain.com.
Step 3
Do all the DNS verification steps. If you use a subdomain, make sure it's reflected in your DNS records
Step 4
Add extra DMARC for better deliverability: TXT | _dmarc.mail.yourdomain.com | v=DMARC1; p=none
Step 5
Go to [Domain Settings] then [SMTP Credentials] then [Reset Passsword], choose [Automatic] and then [Create Password]
Step 6
Click [Copy] at the bottom right of the modal. In .env.local, set EMAIL_SERVER
to:smtp://postmaster@[mail.yourdomain.com]:
[copied_password]@smtp.mailgun.org:587
Step 7
In [Sending API Keys] click [Create sending key] and add it to .env.local as MAILGUN_API_KEY
Step 8
(skip if do not need to receive emails) In [Receiving] click [Create Route].
Select [Match Recipient] and add the email you want to send from. (i.e. name@mail.yourdomain.com). Make sure to match the email you set up at mailgun.supportEmail in the config.ts file. Forward to
Forward to https://[your-domain].com/api/webhook/mailgun
Click [Create Route].
Then add your receiving email (I use my gmail for instance) in mailgun.forwardREpliesTo
in config.ts.
Sending Emails
There are 2 ways to send emails:
First
SMTP: Emails sent for magic login links will be sent using SMTP, for instance.
Second
Mailgun API: To send any other emails, use the sendEmail()
function in libs/mailgun.ts
.
Receiving emails
Mailgun doesn't forward emails automatically, nor store them.
So we created a route that match emails sent to our support email (mailgun.supportEmail
in config.js)
and forward them to our API (your-domain.com/api/webhook/mailgun) which forwards them to our forwardRepliesTo
email in config.ts
It automatically adds the sender in reply-to so you can reply directly from your inbox.