当前位置: 首页 > 后端技术 > Node.js

从0到1搭建域名邮件服务器

时间:2023-04-03 18:53:24 Node.js

前言:大家好,我是书江。文章出处是因为在一次谈话中,有朋友提到了一个需求。需要一批邮箱做一些“事情”,具体做什么,留点悬念。如果手动注册邮箱,只需要解决接收邮件的问题即可。不仅费力,现在像@163这样的邮件也需要手机验证。如果手动不行,那我们就自己“搭建”邮箱。一开始很复杂。毕竟作为前端工程师,这个“要求”是超出大纲的。问题不大,不用慌,看完这篇文章,你就可以创建自己的域邮箱协议进行通信了,为了服务器能够顺利接收邮件,我们需要打开25端口,允许访问25端口同时,如果需要使用foxmail这样的客户端来收发邮件,还需要支持POP3协议,并且需要开放110端口。也就是说,为了保证正常使用邮件服务,需要打开25和110这两个端口。关于POP3协议(PostOfficeProtocol3):该协议主要用于支持使用客户端远程管理服务器上的邮件,并将邮件存储到本地主机下图为配置安全策略组的规则阿里云服务器。一个访问规则被添加到它。接下来是域名。需要配置域名解析。配置主机记录。下图是域名解析配置,主要包括几个记录值MX类:添加MX记录,类型选择MX记录,值可以填写主机名,或者你的公网ip地址或者邮件。例子.com。如果配置的是域名,还需要添加一条A类记录,host记录定义为:mail,详见下图:该配置主要用于支持客户端接收邮件(例如:foxmail)并分别添加smtp和imap,pop等配置,记录值为ip配置,如下图,可以看到列表中的配置,2服务器安装2.1Postfix关于postfix:Postfix是实现SMTP协议的软件,也叫邮件发送服务器,负责邮件转发,具体的转发规则,我们需要修改postfix的配置我用的是阿里云的服务器,首先我们安装邮件服务`postfix'andinstallyuminstallpostfix//服务器安装配置安装成功后,修改配置,通过vi/etc/postfix/main.cf的命令行修改如下配置这里的设置会变成“@”后面的部分e-mail地址)myorigin=$mydomain //将发送地址“@”后的部分设置为域名(不是系统主机名)inet_interfaces=all //接受来自所有网络的请求mydestination=$myhostname,localhost.$mydomain,localhost,$mydomain //指定发送到本地邮件的域名home_mailbox=Maildir/ //指定用户邮箱目录#指定最大邮件数尺寸为10Mmessage_size_limit=10485760#规定收件箱最大容量为1Gmailbox_size_limit=1073741824#SMTP认证smtpd_sasl_type=dovecotsmtpd_sasl_path=private/authsmtpd_sasl_auth_enable=yessmtpd_sasl_security_options=noanonymoussmtpd_sasl_local_domain=$myhostnamesmtpd_recipient_restrictions=permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject下图为postfix中的主要参数。启动并配置postfix后,启动服务postfixcheck//检查配置文件是否正确systemctlstartpostfix//开启postfix服务systemctlenablepostfix//设置postfix服务启动完成postfix配置后,我们需要安装dovecot2.2Dovecot关于Dovecot:是一个开源服务程序,可以为Linux系统提供IMAP和POP3电子邮件服务。安全性高,配置简单,执行速度快。占用较少的服务器硬件资源如上所述,POP3/IMAP是从邮件服务器读取邮件时使用的协议。installyuminstalldovecot//服务器安装配置安装成功后,修改配置,通过vi/etc/dovecot/dovecot.conf命令行修改如下配置protocols=imappop3lmtplisten=*,#新增如下内容configuration#!includeconf.d/10-auth.confssl=nodisable_plaintext_auth=nomail_location=mail_location=maildir:~/Maildirstartsystemctlstartdovecot//开启dovecot服务systemctlenabledovecot//设置dovecot服务启动并完成配置以上两项服务,您离成功又近了一步!阿乐:postfix和dovecot有什么区别?答:postfix主要用于发送邮件,而dovecot主要用于接收邮件。两者的结合可以完成一个完整的电子邮件服务。tree/添加新用户passwdtree//设置用户密码。乐同学:如果我这样创建100个邮箱用户,岂不是浪费时间?别着急,我们写一个shell脚本,批量创建可以解决你的问题创建一个文件,createUser.sh的内容如下/bash#user.txt是要创建的用户的文件passwd.txt是一个随机生成的密码USER_FILE=user。txtpass_FILE=passwd.txtforuserin`catuser.txt`doid$user&>/dev/null#检查用户是否存在if[$?-eq0]thenecho"$useralreadyexists"elseuseradd$user#Createuserif[$?-eq0]thenecho"$usercreatesuccessful"PASSWD=$(echo$RANDOM|md5sum|cut-c1-8)#随机生成的数字echo$PASSWD|passwd--stdin$user&>/dev/null#修改用户密码echo-e"$user\'$PASSWD'\'$(date+%Y%m%d)'">>$pass_FILE#User,Enter密码和日期到文件中。fifidone需要创建一个user.txt来维护我们要创建的用户。比如treeshujiang脚本会根据我们列出的用户名批量生成用户。4.测试邮箱搭建服务并完成用户创建,接下来就是测试邮件是否正常接收。我用foxmail来验证。这个用户名就是我们在上一节中创建的用户名。创建完成后,我们可以发送邮件来测试是否可以成功接收。还有一种方法就是用telnet来测试,最原始的方法我这里就不介绍了。Ale:如果我必须为每个新邮箱用户配置一个客户端来接收邮件,那不是很费力吗?还有别的办法吗?方式?是的,换个角度想,你可以通过配置邮件转发,将所有收到的邮件转发到某个用户的邮箱,而且你只能查看那个邮箱里的邮件(我开始怀疑你的动机了,是不是你做?批量注册!)具体如下,需要配置第二节提到的postfix配置文件,在最后添加virtual_alias_domains=ensbook.commail.ensbook.comvirtual_alias_maps=hash:/etc/postfix/virtual配置完成后查看网上的一些资料需要配置/etc/postfix/virtual文件,这个文件主要是用来管理邮件转发规则的,所以我尝试修改/etc/postfix/virtual文件并添加信息。这条规则的意思是:所有发送到@ensbook.com的邮件,转发到qq邮箱发现没有生效,最后创建一个虚拟用户实现转发和接收。如果看到问题记得在评论区告诉我阿乐同学:收不到邮件,也不知道是什么问题,请问怎么排查?可以通过tail-n/var/log/maillog查看邮件日志最后,通过上面的理解不难看出,域名邮件服务器的创建其实很简单,技术也很古老。不过不管年龄多大,能满足我们的需求就好了。如果大家还有其他实现方式,欢迎在评论区留言。