0%

奇淫巧技 | 构建邮箱服务器

该路已经走通,效果非常舒爽。


参考资料


上面的参考资料都不要看了,看下面的

该项目的备用链接

如果,你不需要构建服务器,可以参考


前构知识


  • 构建服务器必须要 25 端口
    • 因为协议原因,别人给你发送邮件只能发送到 25 端口
    • 具体内容自己搜索,这里不再说了
  • 各大服务商都不可能开放 25 端口
  • 虽然 25 端口的出服务开不了,但是入服务是不关闭的
    • 你不能用服务器发送邮件,但是,可以用服务器接收邮件
    • 阿里云亲测成功
  • 构建邮箱服务器需要域名

达到的效果


用于批量注册平台,用 python 做邮箱服务器,按照购买的域名,可以随意写邮箱接收地址,然后,本地 python 能够读取到。做到,全自动化获取邮件内容。


依靠的开源项目


这个开源项目说的很清楚了,只要一步步的构建就好了。

这里重点说一下,域名解析。

有的时候,你只添加了邮箱解析,但是,你根本不知道有没有解析成功。

所以,我在服务器上安放了一个网页,并且做了 www 解析,同时,也配置了邮箱解析,如果,我可以通过域名访问到该网页,那么,邮箱解析也没有问题了。

这里,我贴一下我的解析内容。

相关的解析方案,我贴一下上面的教程

打开域名管理,以阿里云为例,加入两条信息

加入一条 A 记录,指向我们将要部署的服务IP地址

A    mx     6x.216.2xx.1xx

加入一条 MX 记录,指向上面配置的收邮件的域名地址。

MX    *    mx.sayhiai.com

注意 * 号,意思是所有的域名包括二级域名等,都会被收到。比如xxxx@sayhiai.comxjksfdsf@dfjsdlfjsd.sayhiai.com。 是不是无穷无尽?

ps: 服务商要开启 25 端口的入方向。

2024-4-27

上面说的非常笼统,这里我再说一下怎么完整的构建。

我在 aws 上购买了服务器,用的是 ubuntu 22.04

这个系统自带 python3.10,但是 pip 需要我们自己装

1
sudo apt install python3-pip

在安装的过程中可以跳出弹框让我们选择,我们直接 enter 就好了。

因为,我们要绑定 25 端口,所以,我们需要 sudo 权限。

1
2
sudo pip3 install flask
sudo pip3 install aiosmtpd

进入项目,修改 cfg.ini,将 127.0.0.1 改成 0.0.0.0

然后运行

1
sudo nohup python3.10 main.py &

即可。

使用 http://ip:14000

访问。

记住,服务器的入站规则必须开启 1400025

另外,我再贴一下域名解析的规则,感觉比上面简单一些。

当然,这个网站也有 api ,请查看 web.py

源码修改

我接不到某一网站发的特定邮件怎么办?

说明这个网站发送的内容不符合这份代码的解析。主要修改 smtpx.pyhandle_DATA 函数。

比如,我将某一个修改成

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
async def handle_DATA(self, server, session, envelope):
mail_from = envelope.mail_from
rcpt_tos = envelope.rcpt_tos
message = email.message_from_bytes(envelope.content)
content = print_info(message)
subject = decode_str(message['Subject'])

obj = {
"from": mail_from,
"to": rcpt_tos,
"subject": subject,
"content": content
}

self.dao.store_msg(obj)
if "***" in mail_from:
print("success record msg:" + mail_from + "->" + str(rcpt_tos) + "|" + str(subject))
else:
print("success record msg:" + mail_from + "->" + str(rcpt_tos) + "|" + str(subject) + "content" + content)

return '250 Message accepted for delivery'

修改接收邮件的大小

如果 100 封非常多,可以将这个数值改小。

主要是 data.pylimit 大小。

请我喝杯咖啡吧~