4

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

 2 years ago
source link: https://segmentfault.com/a/1190000040727863
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

image.png

前言:哈喽,我是树酱。文章的源头,是因为在一次交谈中,朋友提到一个需求。需要一批邮箱去做一些"事情",具体是干啥事,留点悬念。如果手动去注册邮箱,只需要解决接收邮件问题。不仅费力而且现在包括像@163等邮箱都还需要手机验证。手动不行,那我们就自己"造"邮箱。一开始觉得挺复杂,毕竟作为一名前端工程师,这个“需求”已经超纲了。问题不大莫慌,看完这篇你就可以打造自己的域名邮箱了

1.前期准备

搭建邮件服务器需要一些“基础建设”,包括如下

  • 一台服务器 推荐centos

1.1 配置细节

邮件服务器是通过SMTP协议进行通信,为了让服务器能够成功接收邮件,我们需要打开25这个端口,并允许访问25端口。同时如果你需要使用像类似foxmail这种客户端接发收邮件,还需要支持POP3协议,需要打开110端口。换句话说为了保证邮件服务的正常使用,需要开启25和110这两个端口

关于 POP3协议(Post Office Protocol 3):协议主要用于支持使用客户端远程管理在服务器上的电子邮件,将电子邮件存储到本地主机

下图是阿里云服务器配置安全策略组的规则,在其中加入一条访问规则

image.png

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

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

  • MX类:增加 MX 记录,类型选择 MX记录,值可以填写主机名,也可以填写你的公网ip地址也可以是mail.example.com。如果配置的是域名,还需要新增一条A类型的记录,主机记录定义为:mail,具体看下图
  • A类:该配置主要用来支持客户端接收邮件(比如:foxmail)分别添加smtp、imap、pop等配置,记录值为 ip

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

image.png

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中主要的参数
image.png

配置完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来做验证

image.png

这个用户名就是我们上一节创建的用户名称,完成创建之后,我们通过发送邮件来测试是否能够成功接收

image.png

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

阿乐同学:如果我每个新建的邮箱用户,我都得去配置一个客户端去接收邮寄,岂不是很费劲,有没有其他方式?

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

具体如下,需要配置下第二节中提到的postfix配置文件,在文件最后添加

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

完成配置之后,我查阅网上一些资料,需要配置/etc/postfix/virtual文件,该文件主要用来管理电子邮件转发规则的

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

image.png

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

发现竟然没有生效,最后是创建一个virtual的用户实现转发接收的。如果你看得出问题,记得在评论区告诉我

阿乐同学:我接收不到邮箱,又不知道什么问题,如何排查?

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

通过上文的了解,我们不难看到,一个域名邮件服务器的创建其实很简单,而且技术很老。但是无论老不老,能够解决我们的需求就好。如果你有其他方式实现,欢迎在评论区留言。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK