1.Register a turso account, create a database, and create an emails table
After registration, you will be prompted to create a database. I named it vmail
here,
Select your database, you will see the "Edit Table" button, click and enter, continue to click the "SQL Runner" button in the upper left corner, and insert the SQL Script Copy to Terminal Run:
# Copy sql script to run on the terminal (packages/database/drizzle/0000_sturdy_arclight.sql)
CREATE TABLE `emails` (
`id` text PRIMARY KEY NOT NULL,
`message_from` text NOT NULL,
`message_to` text NOT NULL,
`headers` text NOT NULL,
`from` text NOT NULL,
`sender` text,
`reply_to` text,
`delivered_to` text,
`return_path` text,
`to` text,
`cc` text,
`bcc` text,
`subject` text,
`message_id` text NOT NULL,
`in_reply_to` text,
`references` text,
`date` text,
`html` text,
`text` text,
`created_at` integer NOT NULL,
`updated_at` integer NOT NULL
);
2.Deploy email workers
git clone https://github.com/oiov/vmail
cd vmail
# Install dependencies
pnpm install
Fill in the necessary environment variables in vmail/apps/email-worker/wrangler.toml
file.
- TURSO_DB_AUTH_TOKEN (turso table info from step 1,click
Generate Token
) - TURSO_DB_URL (e.g. libsql://db-name.turso.io)
- EMAIL_DOMAIN (e.g. vmail.dev)
If you don't do this step, you can add environment variables in the worker settings of Cloudflare
Then run cmds:
cd apps/email-worker
# Node environment required, and your need to install wrangler cli and login first, see https://developers.cloudflare.com/workers/wrangler/install-and-update
pnpm run deploy
3.Configure email routing rules
Set Catch-all
action to Send to Worker
4.Deploy Remix app on Vercel or fly.io
Ensure that the following environment variables (.env.example
) are prepared and filled in during deployment:
Variable | Description | example |
---|---|---|
COOKIES_SECRET | The encryption secret of the cookie, a random string is sufficient | s3cr3t |
TURSO_DB_RO_AUTH_TOKEN | Obtain database credentials from turso | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 |
TURSO_DB_URL | Obtain database credentials from turso | libsql://db-name.turso.io |
EMAIL_DOMAIN | email domains | vmail.dev,meetu.dev |
EXPIRY_TIME | Optional. default 86400 |
86400 |
TURNSTILE_KEY | Optional. Obtained from Cloudflare for website verification | 1234567890 |
TURNSTILE_SECRET | Optional. Obtained from Cloudflare for website verification | s3cr3t |
Get TURNSTILE_KEY
、TURNSTILE_SECRET
from https://dash.cloudflare.com/?to=/:account/turnstile
For Vercel:
Deploy your own version of email to Vercel with one click:
Or push the code to your Github repository and create a new project in Vercel. Choose New project
, then import the corresponding Github repository, fill in the environment variables, select the Remix
framework, and click Deploy
. Wait for the deployment to complete.
Click Couninue to Dashboard -> Settings -> General:
For fly.io:
cd vmail/apps/remix
fly launch
5.Add DNS records (A record) to the corresponding platform in Cloudflare
e.g. vercel:
Done!