Skip to content

yumusb/email_router

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1fcf8e6 · Feb 25, 2025

History

50 Commits
Feb 11, 2025
Sep 19, 2024
Oct 10, 2024
Sep 27, 2024
Sep 19, 2024
Sep 27, 2024
Feb 25, 2025
Oct 17, 2024
Oct 17, 2024
Feb 11, 2025
Feb 11, 2025
Dec 17, 2024
Sep 29, 2024

Repository files navigation

EMAIL ROUTER

该项目是一个支持 多域名 Catch-All 邮件收件 的工具,所有收到的邮件都不会存储,直接转发。它可以将邮件转发到 Telegram 机器人私人邮箱地址。该工具的设计灵感来源于 DuckDuckGo Email Protection ,目标是提供一个完全自托管的解决方案。

功能介绍

  • Catch-All 邮件转发: 支持将接收到的所有邮件直接转发到指定邮箱,而无需存储邮件内容。
  • Telegram 机器人通知: 收到的邮件可通过 Telegram 机器人进行实时通知。
  • 多域名支持: 可以跨多个域名进行邮件转发处理。
  • SMTP 邮件发送: 提供邮件发送功能,可以通过你定义的私人邮箱地址将邮件转发给指定的收件人。

部署步骤

前置准备

1. 服务器准备

公网IP(以223.223.223.223为例),25端口可达 (可以通过本项目内的check_port_25_connectivity.sh进行测试) ,服务器安装好Docker,设置PTR记录(可选,如果只收信则不需要)

2. 域名准备

想要使用的域名(以404.local、403.local为例)

主域名需要设置MX服务器的A记录、MX记录、SPF记录。

;; A Records
mx1.404.local.	1	IN	A	223.223.223.223

;; MX Records
404.local.	1	IN	MX	5 mx1.404.local.

;; TXT Records
404.local.	1	IN	TXT	"v=spf1 mx:404.local -all"

其他域名需要设置MX记录,SPF记录跟随主域名

;; MX Records
403.local.	1	IN	MX	5 mx1.404.local.

;; TXT Records
403.local.	1	IN	TXT	"v=spf1 include:404.local -all"

(不一定非要mx1前缀,任意都可)

1. 克隆仓库

git clone https://github.com/yumusb/email_router.git
cd email_router/deploy

2. 证书相关配置

项目使用acme.sh提供证书,以保证收信过程中的安全。打开 .env 配置文件

DNS_API=dns_cf #目前指定了CF,后续可能完善逻辑
ACME_SH_EMAIL= #随便一个邮箱,用来初始化acme账户
MXDOMAIN= #mx服务器的域名,用来申请证书,按照本文中的例子就需要是mx1.404.local
CF_Token= # 权限需要可以操作 404.local的DNS解析
CF_Zone_ID= # 404.local的Zone ID

3. config.yml配置

telegram:
  bot_token: "<你的_bot_token>"
  chat_id: "<你的_chat_id>"

smtp:
  listen_address: "0.0.0.0:25"
  listen_address_tls: "0.0.0.0:587"
  allowed_domains:
    - "404.local"
    - "403.local"
  cert_file: "/cert/fullchain.pem"
  key_file: "/cert/key.pem"
  private_email: "root123645@foxmail.com"

需要修改的有 telegram相关,allowed_domains修改为自己的域名,private_email修改为要转发到的邮箱。

4. 启动

docker compose up -d 

由于初次启动需要申请证书,所以需要一点时间来启动,只有有效的证书才能启动邮件服务。

5. 收件

为防止出现未知问题,程序对收件地址的规则做了限制。允许的收件地址规则为^(\w|-)+@.+$
例如以下:

root@404.local
404@404.local
my-admin@404.local
random@404.local

可以结合Bitwarden中的用户名生成器,效果更佳。 可以通过自己的其他邮箱向域名邮箱进行发信测试,不出意外应该可以收到来自自己域名转发的邮件。

6. 发件

DuckDuckGo Email Protection 的逻辑一样

For example, if your personal Duck Address is jane@duck.com and you want to send to your friend’s email brian@gmail.com. To send the email from your personal Duck Address, you would send the message to brian_at_gmail.com_jane@duck.com.

其中 jane 可以是你喜欢的、你需要的 任意前缀,因为这是你的域名。
同样的,直接回复收到的转发的来信,服务器也会帮你自动转发回去。

需要注意的是,发信非常依赖信誉,你的IP信誉、域名信誉、PTR设置等。如果你发现私人邮箱收到的邮件在垃圾箱,可以手动加白下,很有可能发送给别人的也进了垃圾箱。

其他问题

todo

  • spf check
  • 证书自动续期相关逻辑