Linux搭建postfix+dovecot邮件服务器

4,097 阅读4分钟

先确定服务器是否属于阿里云,因为阿里云出于安全考虑禁用了25发信端口,发起工单可以申请解封25端口,但是据说此过程漫长而又不靠谱,只好通过465加密端口来发送邮件,具体方法见:

blog.sina.com.cn/s/blog_b953…

本来打算使用465端口来发信的,结果按照上面的流程配置完后死活无法正常的收发外域邮件,百度谷歌都查不到原因所在。telnet结果如下:

telnet mail.ranger.com 465
Trying ip地址
Connected to mail.ranger.com.
Escape character is '^]'.

而正常的telnet应该是这样的:

telnet mail.ranger.com 465
Trying ip地址
Connected to mail.ranger.com.
Escape character is '^]'.
220 mail.ranger.com ESMTP Postfix

使用465端口发信后监测maillog日志发现在发信时依然是连接25端口去发信的:connect to mx1.qq.com[58.251.110.111]:25: Connection timed out,为什么没有使用465?要知道这时候阿里云安全站规则加了465端口,而且防火墙也开了465端口(事实上把防火墙关了也还是那个错误)。百思不得其解......

随后找了另一台非阿里云服务器来搭建,下面是具体流程:

一、添加邮箱域名解析记录

先加入MX记录(Mail Exchanger记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。例如,当Internet上的某用户要发一封信给user@baidu.com 时,该用户的邮件系统通过DNS查找baidu.com这个域名的MX记录,如果MX记录存在,用户计算机就将邮件发送到MX记录(MX优先级数字越小优先级越高)所指定的邮件服务器上。 例子: @ MX 优先级 mail.baidu.com(A记录主机名加域名) )。

主机记录必须填 @ 符号,否则无法接收邮件。

MX记录必须在A记录之前,否则无法接收邮件。

参考文章:

www.comingchina.com/windows/ins…

www.360doc.com/content/11/…

二、设置主机名

# nano /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mail.ranger.com    #修改成自己的邮箱域名

#nano /etc/hosts
127.0.0.1   localhost mail.ranger.com localhost.localdomain localhost4 localhost4.localdomain4
#在localhost后面加入邮箱域名,中间要有空格

重新打开会话就会发现主机名已变:[root@mail ~]#

三、安装发件服务器postfix

先查询是否已安装postfix:

# service postfix status

如未安装使用指令:

# yum install postfix

编辑/etc/postfix/main.cf文件:

# 编辑之前先复制文件
# cp /etc/postfix/main.cf /etc/postfix/main.cf_Old
# nano /etc/postfix/main.cf
myhostname = mail.ranger.com    //主机名
mydomain = ranger.com           //设置本地网络的邮件域
myorigin = $mydomain            //要外发邮件时发件人的邮件域名
inet_interfaces = all           //设置postfix监听的网络端口
inet_protocols = ipv4           //推荐ipv4,如果支持ipv6,则可以为all
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
//设置可接收邮件的主机名   或域名。来自其他主机名或域名的邮件将拒绝接收
mynetworks = 0.0.0.0/0          //指定了本地网络的IP段,默认只包含主机自己
relay_domains = $mydestination  //设置可转发来自哪些域名或主机名的邮件
home_mailbox = Maildir/         //邮件存储的位置

设置完成后重启postfix:

# service postfix restart

测试发信:

1.创建账号
# useradd ranger    //linux创建账号的同时也会创建一个同名邮箱账号,邮箱账号不能有大写字母,否则无法收发邮件
# echo '123456' | passwd --stdin ranger
# useradd admin
# echo '123456' | passwd --stdin admin

2.使用 telnet 工具进行发信测试
# telnet mail.ranger.com 25
Trying ip地址...
Connected to mail.ranger.com.
Escape character is '^]'.
220 mail.ranger.com ESMTP Postfix
HELO mail.ranger.com            //宣告客户地址
250 mail.ranger.com
MAIL FROM:ranger@ranger.com		//发件人地址
250 2.1.0 Ok
RCPT TO:admin@ranger.com		        //收件人地址
250 2.1.5 Ok
DATA			                //邮件内容
354 End data with <CR><LF>.<CR><LF>
Subject:test mail	            //邮件主题
hello!                          //邮件内容
this is test mail
.			                    //最后这个点 表示结束
250 2.0.0 Ok: queued as 508F0104FA00
quit		                    //	退出
221 2.0.0 Bye
Connection closed by foreign host.

下一模块中查看收件。

四、安装收件服务器dovecot

# yum install dovecot -y
# 编辑主配置文件
# nano /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp              //指定本邮件主机所运行的协议
listen = *                              //监听本机的所有网络接口
login_trusted_networks = 0.0.0.0/0      //指定允许登录的网段地址

# nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir       //指定邮件存储格式和位置

# nano /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no

# nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir

# nano /etc/dovecot/conf.d/10-ssl.conf
ssl = no

重启dovecot

# service dovecot restart

# telnet mail.ranger.com 110
Trying ip地址...
Connected to mail.ranger.com.
Escape character is '^]'.
+OK Dovecot ready.
user admin          //输入用户名
+OK
pass 123456         //输入用户密码
+OK Logged in.
list                //查看邮件列表
+OK 1 messages:
1 1597
.
retr 1              //查看第一封邮件

+OK 1598 octets     //邮件内容
***********

quit
+OK Logging out.
Connection closed by foreign host.

五、使用Foxmail测试邮箱收发

配置完成后可以使用Foxmail提供的小工具来检测邮箱是否能正常使用:

最后的测试包括域内外的收发,都正常收发就没问题了。