关于javascript:从0到1搭建域名邮件服务器

34次阅读

共计 3553 个字符,预计需要花费 9 分钟才能阅读完成。

前言:哈喽,我是树酱。文章的源头,是因为在一次交谈中,敌人提到一个需要。须要一批邮箱去做一些 ” 事件 ”,具体是干啥事,留点悬念。如果手动去注册邮箱,只须要解决接管邮件问题。不仅费劲而且当初包含像 @163 等邮箱都还须要手机验证。手动不行,那咱们就本人 ” 造 ” 邮箱。一开始感觉挺简单,毕竟作为一名前端工程师,这个“需要”曾经超纲了。问题不大莫慌,看完这篇你就能够打造本人的域名邮箱了

1. 后期筹备

搭建邮件服务器须要一些“根底建设”,包含如下

  • 一台服务器 举荐 centos
  • 一个域名

1.1 配置细节

邮件服务器是通过 SMTP 协定进行通信,为了让服务器可能胜利接管邮件,咱们须要关上 25 这个端口,并容许拜访 25 端口。同时如果你须要应用像相似 foxmail 这种客户端接发收邮件,还须要反对 POP3 协定,须要关上 110 端口。换句话说为了保障邮件服务的失常应用,须要开启 25 和 110 这两个端口

对于 POP3 协定(Post Office Protocol 3):协定次要用于反对应用客户端远程管理在服务器上的电子邮件,将电子邮件存储到本地主机

下图是阿里云服务器配置安全策略组的规定,在其中退出一条拜访规定

接下来是域名,须要配置域名解析,配置主机记录

如下图是域名的解析配置,次要包含几个记录数值

  • MX 类:减少 MX 记录,类型抉择 MX 记录,值能够填写主机名,也能够填写你的公网 ip 地址也能够是 mail.example.com。如果配置的是域名,还须要新增一条 A 类型的记录,主机记录定义为:mail,具体看下图
  • A 类:该配置次要用来反对客户端接管邮件(比方:foxmail)别离增加 smtp、imap、pop 等配置,记录值为 ip

配置完如下图所示,能够在列表中看到配置好的,

2 服务器装置

2.1 Postfix

对于 postfix:Postfix 是实现 SMTP 协定的软件,也叫做邮件发送服务器,负责对邮件进行转发,具体的转发规定,就须要咱们对 postfix 的配置进行批改

我应用的是阿里云的服务器,首先咱们装置邮件服务 `postfix’

  • 装置
yum install postfix // 服务器装置 
  • 配置

装置胜利之后,批改配置,通过vi /etc/postfix/main.cf 命令行批改以下配置

myhostname =  email.example.com //  设置零碎的主机名

mydomain = example.com  //  设置域名(咱们将让此处设置将成为 E -mail 地址“@”前面的局部)myorigin = $mydomain  //  将发信地址“@”前面的局部设置为域名(非零碎主机名)inet_interfaces = all  //  承受来自所有网络的申请

mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain  //  指定发给本地邮件的域名

home_mailbox = Maildir/  // 指定用户邮箱目录

# 规定邮件最大尺寸为 10M
message_size_limit = 10485760
# 规定收件箱最大容量为 1G
mailbox_size_limit = 1073741824
# SMTP 认证
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_auth_destination,permit_sasl_authenticated,reject

下图是 postfix 中次要的参数

  • 启动

配置完 postfix 的,启动服务

postfix check   // 查看配置文件是否正确
systemctl start postfix  // 开启 postfix 服务
systemctl enable postfix // 设置 postfix 服务开机启动

实现 postfix 的配置,接下来咱们还须要装置dovecot

2.2 Dovecot

对于 Dovecot:是一款可能为 Linux 零碎提供 IMAP 和 POP3 电子邮件服务的开源服务程序,安全性极高,配置简略,执行速度快,而且占用的服务器硬件资源也较少。上文提到 POP3/IMAP 是从邮件服务器中读取邮件时应用的协定

  • 装置
yum install dovecot // 服务器装置 
  • 配置
    装置胜利之后,批改配置,通过vi /etc/dovecot/dovecot.conf 命令行批改以下配置
protocols = imap pop3 lmtp listen = *, 

#新增加以下配置 #

!include conf.d/10-auth.conf 

ssl = no 

disable_plaintext_auth = no 

mail_location = maildir:~/Maildir
  • 启动
systemctl start dovecot   // 开启 dovecot 服务
systemctl enable dovecot   // 置 dovecot 服务开机启动

实现以上两个服务的配置,你离胜利就近一步了!

啊乐同学:postfix 与 dovecot 这两个其实有什么区别?

答:postfix 次要做发送邮件应用,而 dovecot 次要做接管应用,两者联合能力实现一个残缺的邮件服务

3 新建用户

搭建完邮件服务器之后,咱们须要创立用户来实现 邮件的接管和发送

  • 如何创立用户
useradd tree/ 新增用户
passwd tree   // 设置用户明码

啊乐同学:如果这样我创立 100 个邮箱用户,岂不是很浪费时间?

莫慌,咱们写个 shell 脚本,批量创立就能够解决你这个问题

创立一个文件,createUser.sh 内容如下

/bash
#user.txt 为须要创立的用户的文件 passwd.txt 为随机生成明码
USER_FILE=user.txt
pass_FILE=passwd.txt
for user in `cat user.txt`
do
id $user &> /dev/null  #查看用户是否存在
if [$? -eq 0]
then
echo "The $user already exist"
else
useradd $user    #创立用户
if [$? -eq 0]
then
echo "$user create sucessful"
PASSWD=$(echo $RANDOM |md5sum |cut -c 1-8)    #随机生成数字
echo $PASSWD |passwd --stdin $user &>/dev/null   #批改用户明码
echo -e "$user\'$PASSWD'\'$(date +%Y%m%d)'" >> $pass_FILE   #将用户,明码,日期输出到文件中
fi
fi
done

前提须要建设一个 user.txt 来保护咱们要创立的用户,比方

tree
shujiang

脚本会依据咱们列出的用户名去批量生成用户

4. 测试邮箱

搭建好服务以及实现用户的创立,接下来就是测试邮件是否失常接管环节了

我应用的是 foxmail 来做验证

这个用户名就是咱们上一节创立的用户名称,实现创立之后,咱们通过发送邮件来测试是否可能胜利接管

还有一种形式就是借助 telnet 去做测试,这里不做大篇幅介绍。最原始的形式

阿乐同学:如果我每个新建的邮箱用户,我都得去配置一个客户端去接管邮寄,岂不是很吃力,有没有其余形式?

有的,换个角度思考,你能够通过配置邮件转发,将所有邮件接管都转发到某一个用户的邮箱中去,你就能够只在该邮箱查阅邮件(我开始狐疑你的动机,是不是搞什么批量注册!)

具体如下,须要配置下第二节中提到的 postfix 配置文件,在文件最初增加

virtual_alias_domains = ensbook.com  mail.ensbook.com
virtual_alias_maps = hash:/etc/postfix/virtual

实现配置之后,我查阅网上一些材料,须要配置 /etc/postfix/virtual 文件,该文件次要用来治理电子邮件转发规定的

于是我尝试批改 /etc/postfix/virtual 文件,并增加一下信息

这条规定的含意是:所有邮件发送至 @ensbook.com 转发到 qq 邮箱

发现居然没有失效,最初是创立一个 virtual 的用户实现转发接管的。如果你看得出问题,记得在评论区通知我

阿乐同学:我接管不到邮箱,又不晓得什么问题,如何排查?

你能够通过 tail -n /var/log/maillog 查看邮件日志

最初

通过上文的理解,咱们不难看到,一个域名邮件服务器的创立其实很简略,而且技术很老。然而无论老不老,可能解决咱们的需要就好。如果你有其余形式实现,欢送在评论区留言。

正文完
 0