LetterWP sends every email through your own Resend account, from your own domain. This guide follows LetterWP → Setup from step 1 to step 6.
Create a Resend account
Sign up at resend.com. Resend is free for marketing email up to 1,000 contacts. Each active subscriber is one contact.
1. Resend: connect a Full access key
- In Resend, open API Keys and create a new key. Set its permission to Full access. The create one link under the field in LetterWP opens this page for you.
- Copy the key. Resend shows it only once.
- In wp-admin, go to LetterWP → Setup. Under 1. Resend, paste the key in API key and click Connect.
LetterWP checks the key with Resend before it saves it. When it works, you see “Connected to Resend.” and the key shows masked, with a Connected label.
Why Full access: LetterWP reads and adds your domains, and creates your list, topics and webhook in Resend. A Sending access key can only send, so LetterWP turns it down with “That is a Sending access key. It can send email but cannot manage domains. Create a Full access key at Resend and paste that instead.”
To change keys, click Disconnect, then connect the new one. Until you do, the site sends no email.
Optional: keep the key in wp-config.php
If you’d rather not store the key in the database, add this line to wp-config.php, above the line that says “That’s all, stop editing!”:
define( 'LETTERWP_RESEND_API_KEY', 're_your_key_here' );
The constant wins over a saved key. Step 1 then says “Set by LETTERWP_RESEND_API_KEY in wp-config.php. Remove the constant to disconnect.” A key set this way isn’t checked before use, so make sure it is a Full access key.
2. Domains: add and verify your domain
- Under 2. Domains, type your domain in Add a domain and click Add to Resend. Your site’s domain is filled in for you. A subdomain such as news.example.com works too.
- LetterWP opens the domain and lists the DNS records Resend wants, with Type, Name, Value, Priority and Status.
- Add each record where your domain’s DNS is managed, such as Cloudflare or your registrar. Use the Copy button next to each name and value.
- Click Check again. Resend checks in the background, so reload the page in a minute.
- Wait until the label next to the domain says Ready to send. DNS can take from a few minutes to a few hours.
On Cloudflare, set every record to DNS only (grey cloud). A proxied (orange) record makes the check fail.
Until the domain is ready, its label says what is left, such as Not ready: add the DNS records or Not ready: waiting for DNS. LetterWP never deletes domains: use Delete in Resend ↗ for that.
Add a DMARC record (recommended)
Resend checks SPF and DKIM only. LetterWP also looks up your DMARC record. If there is none, the domain list shows No DMARC, and the records table gets one more TXT row marked Recommended:
- Type: TXT
- Name:
_dmarc(for a subdomain such as news.example.com, the screen shows_dmarc.news) - Value:
v=DMARC1; p=none;
You can send without it. But Gmail and Yahoo trust a domain more with one, and require it once you send over 5,000 emails a day. p=none never blocks anything. One record on your root domain covers every subdomain too. A new record can take up to 30 minutes to show as DMARC found.
3. Your list in Resend: run setup
Under 3. Your list in Resend, click Run setup. It creates what LetterWP needs in your Resend account:
- Segment: one segment called General. Every subscriber is in it, and every newsletter is sent to it.
- Topics: one topic per post category. Everyone gets every topic until they turn one off. A post is sent under its category’s topic. New, renamed and deleted categories update Resend by themselves.
- Unsubscribe links: a contact property called
letterwp_key. It makes the Unsubscribe link in every newsletter work in one click, on your site. - Webhook: brings bounces, spam complaints and unsubscribes at Resend back to your Subscribers list within seconds. It also brings each post’s delivery results.
- An Account page, if you don’t have one yet (see step 6).
Each row shows Ready or Not in Resend yet. When all are ready, you see Everything is set up and a Run setup again button. Run it again whenever a row says “Out of date”. It is safe to run as often as you like.
4. Sender addresses
Fill in two addresses on your verified domain, and your postal address. Then click Save addresses.
- Transactional email address: confirm-your-subscription and sign-in links, sent to one reader at a time. For example [email protected].
- Newsletter email address: every issue comes from this address, and replies go here too. Use an inbox you read, such as [email protected].
- Postal address: printed in the footer of every newsletter. Anti-spam laws (CAN-SPAM in the US, CASL in Canada) ask for a real postal address. A PO box is fine.
Next to each address, a live label says Can send via Resend, or Can’t send yet with the reason and a link to fix it. The address must be on a domain that is ready: a verified example.com does not cover news.example.com.
The sender name is your site’s name. Change it in Settings → General → Site Title.
5. Test email
- Under 5. Test email, pick an address in From.
- Type an inbox you read in To. Gmail is best: it is the strictest about spam.
- Click Send test email.
Check the inbox, and the spam folder too. If it landed in spam, mark it “Not spam” and check your DNS records, DMARC included. See the last test at Resend.com ↗ shows what Resend did with it.
6. Account page
This is where readers sign in with an email link (no password), pick their topics and unsubscribe. Run setup already made one called Account. To use another page, pick it under Page and click Save. Any published page works: the account panel is added after its content. With no page set, click Create an Account page.
In Pages, the page is marked LetterWP Account Page.
