Skip to content

Latest commit

 

History

History
119 lines (82 loc) · 5.07 KB

send-tutorial-en.md

File metadata and controls

119 lines (82 loc) · 5.07 KB

Email Sending Tutorial

Preparation Work

  • Continue to use the domain hosted on cf from the email receiving tutorial.
  • DKIM (optional)

1. Create a Sending Worker

Here we will manually create it:

  • Go to the Cloudflare dashboard at https://dash.cloudflare.com/, click on Workers and Pages in the sidebar.
  • Click Create an app -> Create a worker -> Name it as you wish, for example, sender -> Click Deploy.
  • Enter the worker and click Edit code. Paste the following code
  • In the worker's Settings -> Variables, add the following variables:
Variable Name Description Example
DKIM_DOMAIN Optional, domain suffix vmail.dev
DKIM_PRIVATE_KEY Optional, DKIM private key MIIEpQIBAAKCAQEA...
DKIM_SELECTOR Optional, fixed value mailchannels mailchannels

The DKIM_PRIVATE_KEY will be explained later on how to obtain it.

Remember the address assigned to the worker, i.e., https://<worker-name>.<your-name>.workers.dev, which will be used later.

2. Prepare DKIM Private Key (optional)

DKIM is an email authentication technology that can verify the identity of the email sender.

Execute the following command in the terminal to generate a DKIM private key, refer to Adding a DKIM Signature:

openssl genrsa 2048 | tee private_key.pem | openssl rsa -outform der | openssl base64 -A > private_key.txt

echo -n "v=DKIM1;p=" > dkim_record.txt && openssl rsa -in private_key.pem -pubout -outform der | openssl base64 -A >> dkim_record.txt

These two commands will generate 3 files:

  • private_key.pem: Private key file.
  • private_key.txt: Private key file in base64 encoding.
  • dkim_record.txt: DKIM record.

The content of the private_key.txt file is the value for the DKIM_PRIVATE_KEY variable in the previous step.

3. Configure DNS

Enter the Cloudflare domain control console, select your domain -> Click DNS, next, you need to add 3 TXT records and modify 1 TXT record.

The new ones are as follows:

Type Name Value Remarks
TXT _dmarc v=DMARC1; p=reject; adkim=s; aspf=s; rua=mailto:YYY; ruf=mailto:YYY pct=100; fo=1; Fixed value
TXT mailchannels._domainkey v=DKIM1;p=MIIEpQIBAAKCAQEA... The value is the content of the dkim_record.txt file
TXT _mailchannels v=mc1 cfid=yesmore.workers.dev Replace yesmore with your account name

The one that needs modification (the TXT record value is example.com, i.e., your domain name):

Type Name Value Remarks
TXT example.com v=spf1 include:_spf.mx.cloudflare.net include:relay.mailchannels.net ~all Replace the value with this, leave the rest unchanged

In the end, there will be a total of 4 TXT records:

Verify if the DKIM record is configured successfully at dkim-record-checker.

4. Verify Sending

Method one: Open the webpage https://<sender-name>.<your-name>.workers.dev/submit to verify if sending is normal.

Method two: Send via API

  • Request URL https://<sender-name>.<your-name>.workers.dev
  • Request Method POST
  • Request Body:
{
  "from": {
      "email": "[email protected]",
      "name": "Sender"
  },
  "personalizations": [
    {
      "to": [
        {
          "email": "[email protected]",
          "name": "Recipient"
        }
      ]
    }
  ],
  "subject": "Email Subject",
  "content": [
    {
      "type": "text/plain",
      "value": "Email Content"
    }
  ]
}

Example:

5. Add Environment Variables

This project uses the method two from step four to send emails via API.

In the Vercel project console, go to Settings -> Environment Variables, and add the following variable:

  • SEND_WORKER_URL: The value should be https://<sender-name>.<your-name>.workers.dev

After adding, trigger a redeployment.