Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的。最早在1990年代晚期出现,是一个开放源代码的软件。

sendmail:性能好,设置复杂,适合老手

postfix:前身是sendmail,postfix原本是sendmail里面的一个模块,CentOS6 默认安装好postfix

qmail:体积小260+k ,模块化。需要做二次开发,适合对邮件性能有要求的

zmailer:近几年才出来的邮件

coremail:国内做的最好的商业平台,运行在linux上

 

sendmail 官网http://www.sendmail.org

mailx 官网http://heirloom.sourceforge.net/mailx.html

postfix 官网http://www.postfix.org

cyrus-sasl 官网https://github.com/cyrusimap/cyrus-sasl/

sendEmail 官网http://caspian.dotconf.net/menu/Software/SendEmail/

 

系统环境

CentOS 7.5  x86_64

Apache/2.4.34

nginx/1.14.0

 

一、准备工作

CentOS 7.2 部署邮件服务器 Postfix

CentOS 7 搭建postfix邮件服务器

Centos7.1下用Postfix和Dovecot搭建邮件服务器

CentOS 6.5_64位系统下安装配置postfix邮件系统

 

1、名词解释

MUA(Mail User Agent)接收邮件所使用的邮件客户端,使用IMAP或POP3协议与服务器通信;

MTA(Mail Transfer Agent) 通过SMTP协议发送、转发邮件的传输端

MDA(Mail Deliver Agent)将MTA接收到的邮件保存到磁盘或指定地方,通常会进行垃圾邮件及病毒扫描;

MRA(Mail Receive Agent)负责实现IMAP与POP3协议,与MUA进行交互;

SMTP(Simple Mail Transfer Protocol)传输发送邮件所使用的标准协议;

IMAP(Internet Message Access Protocol)接收邮件使用的标准协议之一;

POP3(Post Office Protocol 3) 接收邮件使用的标准协议之一。

 

邮件传输过程 MUA、MTA、MDA

MUA outlook、thunderbird、Mac Mail、mutt
MTA sendmail、postfix
MDA procmail、dropmail
MRA dovecot  

MUA:用户代理端,即用户使用的写信、收信客户端软件。比如:outlook、foxmail等客户端软件,乃至通过浏览器登录邮箱并发送邮件的BS架构网页也算是MUA。

MTA:邮件传送端,即常说的邮件服务器,用于转发、收取用户邮件。本文之中的postfix实现的就是MTA,当然postfix也是一种特殊的MUA,不再深入介绍,本文之中仅把postfix当做MTA使用。

MDA:邮件代理端,相当于MUA和MTA的中间人,可用于过滤垃圾邮件。

MRA:负责实现IMAP与POP3协议,与MUA进行交互;

SMTP:简单邮件传送协议,MUA连接MTA或MTA连接MTA发送邮件使用此协议,通信端口25,启用ssl/tls的情况下端口为465或587。

IMAP:互联网应用协议,功能与POP类似:也用于MUA连接服务器收取用户邮件;功能较POP多,通信端口143(双向

POP3:邮局协议,当前是第三版,用于MUA连接服务器收取用户邮件,通信端口110 (单向

 

2、发邮件的步骤流程

1)MUA通过POP、IMAP或SMTP协议连接MTA(称之为mta1),php通过phpmailer请求发送邮件的php脚本就扮演了MUA的角色,而postfix就是MTA

2)MUA发送邮件给mta1(或者说MUA通过mta1发送邮件),postfix就是这个mta1

3)mta1与其他的MTA自主沟通连接将邮件传送至指定域下的指定用户(此时mta1就扮演了MUA的角色功能,这种交互是由邮件系统软件自主实现,与用户端无关)

 

3、设置域名MX 解析

需要添加两条记录,一般情况下10分钟左右会生效

记录类型 主机记录 解析线路(isp) 记录值 MX优先级 TTL值
A mail 默认 47.106.126.18 10 分钟
MX @ 默认 mail.mimvp.com 10 10 分钟

 

4、本机设置DNS

vim /etc/hosts

47.106.126.18   mimvp   mimvp.com

 

 

二、安装 postfix

Postfix 是用来收发邮件的,它没有web页面,所以要配合本地的邮件用户代理(MUA,Mail User Agent,类似于foxmail,outlook之类的软件)来进行可视化的邮件管理操作。 

Dovecot 是一个开源的IMAP和POP3邮件服务器,支持Linux/Unix 系统,作为IMAP和POP3服务器,Dovecot并不负责从其他邮件服务器接收邮件,Dovecot只是将已经存储在邮件服务器上的邮件通过MUA显示出来。

 

1、卸载 sendmail,安装 postfix、dovecot

yum -y remove sendmail
yum -y install postfix dovecot

# yum -y remove sendmail
# yum -y install postfix dovecot
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package 2:postfix-2.10.1-6.el7.x86_64 already installed and latest version
Package 1:dovecot-2.2.10-8.el7.x86_64 already installed and latest version

修改默认邮件传输代理:

alternatives --config mta

# alternatives --config mta

There is 1 program that provides 'mta'.

  Selection    Command
-----------------------------------------------
*+ 1           /usr/sbin/sendmail.postfix

Enter to keep the current selection[+], or type selection number: 1

查看邮件传输代理是否修改成功:

alternatives --display mta

 

2、安装 cyrus-sasl

cyrus-sasl 服务是提供smtp的虚拟账户和密码服务

SASL的全称是the Simple Authentication and Security Layer,它的机制是对协议执行验证。

如果有某种f服务(如SMTP或IMAP)使用了SASL,使用这种协议的应用程序之间将会共享代码。

一些明显使用SASL的应用程序有sendmail( 8.10.0版本以后)和Cyrus imapd(1.6.0版本以后)。

yum -y install cyrus-sasl-*

# yum -y install cyrus-sasl-*                
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Package cyrus-sasl-lib-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-ntlm-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-plain-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-md5-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-gs2-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-devel-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-ldap-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-scram-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-gssapi-2.1.26-23.el7.x86_64 already installed and latest version
Package cyrus-sasl-sql-2.1.26-23.el7.x86_64 already installed and latest version

 

3、修改 postfix 配置

vim /etc/postfix/main.cf

myhostname=mail.mimvp.com  # 这里要换成你自己的邮箱服务器
mydomain=mimvp.com         # 这里换成你自己的主机服务器
myorigin = $mydomain
inet_interfaces = all      #可以接收所有域名的邮件
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain,mail.$mydomain, www.$mydomain, ftp.$mydomain
local_recipient_maps =
mynetworks =0.0.0.0/0   #设置内网ip
relay_domains = $mydestination
home_mailbox = Maildir/
smtpd_banner = $myhostname ESMTP

# 启用SMTP认证,额外手动以下内容
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_unknown_sender_domain
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_security_options = noanonymous
proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks

创建授权文件:

touch /var/spool/postfix/private/auth

查看 postconf -a

# postconf -a              
cyrus
dovecot

 

3、修改 dovecot 配置

vim /etc/dovecot/dovecot.conf

修改后的内容如下:(供参考,不推荐

auth_mechanisms = plain login
base_dir = /var/run/dovecot/
debug_log_path = /var/log/dovecot_debug.log
disable_plaintext_auth = no
first_valid_uid = 1000
info_log_path = /var/log/dovecot_info.log
login_trusted_networks = 0.0.0.0/0
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mbox_write_locks = fcntl

namespace inbox {
    inbox = yes
    location = mbox:~/mail:INBOX=/var/mail/%u
    mailbox Drafts {
        special_use = \Drafts
    }
    mailbox Junk {
        special_use = \Junk
    }
    mailbox Sent {
        special_use = \Sent
    }
    mailbox "Sent Messages" {
        special_use = \Sent
    }
    mailbox Trash {
        special_use = \Trash
    }
    prefix =
}
passdb {
    args = dovecot
    driver = pam
}
service auth {
    unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        user = postfix
    }
    unix_listener auth-userdb {
        group = noreply
        mode = 0666
        user = noreply
    }
}
service imap-login {
    inet_listener imap {
        port = 143
    }
}
service pop3-login {
    inet_listener pop3 {
        port = 110
    }
}
ssl = no
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem
userdb {
    driver = passwd
}

说明,上面的配置文件并非一个,而是修改了/etc/dovecot/conf.d/ 文件夹下的以下几个文件:

10-auth.conf
10-ssl.conf
10-mail.conf
10-master.conf
10-logging.conf

修改完成以后使用 doveconf -n > dovecot-new.conf 命令生成一个全新的综合的配置文件。

 

或者,如果不熟悉上面的自动综合配置文件,可以逐个修改如下文件(推荐方式

vim /etc/dovecot/dovecot.conf

protocols = imap pop3 lmtp
listen = *, ::

 

vim /etc/dovecot/conf.d/10-auth.conf

disable_plaintext_auth = no
auth_mechanisms = plain login

 

vim /etc/dovecot/conf.d/10-mail.conf

mail_location = maildir:~/Maildir

 

vim /etc/dovecot/conf.d/10-master.conf

service imap-login {
    inet_listener imap {
        port = 143
    }
}
service pop3-login {
    inet_listener pop3 {
        port = 110
    }
}
service auth {
    unix_listener auth-userdb {
        mode = 0666
        user = noreply
        group = noreply
    }
    unix_listener /var/spool/postfix/private/auth {
        mode = 0666
        user = postfix
        group = postfix
    }
}

 

vim /etc/dovecot/conf.d/10-ssl.conf

ssl = no

 

vim /etc/dovecot/conf.d/10-logging.conf

debug_log_path = /var/log/dovecot_debug.log

 

4、修改 sasl2 配置

vim /etc/sysconfig/saslauthd

MECH=shadow  # 指定以本地系统用户名认证

 

vim /etc/sasl2/smtpd.conf

pwcheck_method: saslauthd
mech_list: plain login
log_level: 3

 

5、配置用户和权限

发送和接收邮件使用系统用户的帐号和密码,先创建系统账户

useradd noreply
echo "pwdOfMail" | passwd --stdin noreply
sudo chmod 0775 /var/spool/mail/*

查看创建的用户 noreply 

# ll /var/spool/mail/
total 16384
-rw-rw---- 1 git     mail        0 May 21  2017 git
-rw-rw---- 1 noreply mail        0 Aug  1 19:48 noreply
-rw------- 1 root    mail 16772039 Aug  1 17:39 root
-rw-rw---- 1 rpc     mail        0 Aug  7  2016 rpc
-rw-rw---- 1 www     mail        0 Dec  5  2017 www

必要时,记得检查和开启防火墙 iptables 或 firewalld

 

6、启动 postfix dovecot saslauthd

systemctl start postfix dovecot saslauthd

使其开机自动启动

systemctl enable postfix dovecot saslauthd

查看其状态

systemctl status postfix dovecot saslauthd

# systemctl status postfix dovecot saslauthd       
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-08-01 17:16:26 CST; 10s ago
  Process: 4355 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 4352 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 4337 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 4427 (master)
   CGroup: /system.slice/postfix.service
           ├─4427 /usr/libexec/postfix/master -w
           ├─4429 pickup -l -t unix -u
           ├─4430 qmgr -l -t unix -u
           ├─4431 trivial-rewrite -n rewrite -t unix -u
           ├─4432 local -t unix
           ├─4433 local -t unix
           ├─4434 bounce -z -t unix -u
           ├─4435 bounce -z -t unix -u
           ├─4436 bounce -z -t unix -u
           ├─4437 cleanup -z -t unix -u
           ├─4438 local -t unix
           ├─4439 bounce -z -t unix -u
           ├─4440 cleanup -z -t unix -u
           ├─4441 smtp -t unix -u
           ├─4442 cleanup -z -t unix -u
           ├─4443 smtp -t unix -u
           ├─4444 smtp -t unix -u
           └─4445 smtp -t unix -u

Aug 01 17:16:26 mimvp-sz2 postfix/bounce[4439]: 2E8C140306: sender non-delivery notification: BECD4402CB
Aug 01 17:16:26 mimvp-sz2 postfix/qmgr[4430]: 2E8C140306: removed
Aug 01 17:16:27 mimvp-sz2 postfix/smtp[4444]: BD8AC40328: to=<root@mimvp-sz2.com>, relay=none, delay=0.5, delays=0.02/0....found)
Aug 01 17:16:27 mimvp-sz2 postfix/smtp[4443]: BDD0C402CA: to=<root@mimvp-sz2.com>, relay=none, delay=0.5, delays=0.01/0....found)
Aug 01 17:16:27 mimvp-sz2 postfix/qmgr[4430]: BDD0C402CA: removed
Aug 01 17:16:27 mimvp-sz2 postfix/qmgr[4430]: BD8AC40328: removed
Aug 01 17:16:27 mimvp-sz2 postfix/smtp[4445]: BECD4402CB: to=<root@mimvp-sz2.com>, relay=none, delay=0.49, delays=0.01/0...found)
Aug 01 17:16:27 mimvp-sz2 postfix/qmgr[4430]: BECD4402CB: removed
Aug 01 17:16:27 mimvp-sz2 postfix/smtp[4441]: BC44540327: to=<root@mimvp-sz2.com>, relay=none, delay=0.53, delays=0.02/0...found)
Aug 01 17:16:27 mimvp-sz2 postfix/qmgr[4430]: BC44540327: removed

● dovecot.service - Dovecot IMAP/POP3 email server
   Loaded: loaded (/usr/lib/systemd/system/dovecot.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-08-01 17:16:26 CST; 11s ago
  Process: 4338 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, status=0/SUCCESS)
 Main PID: 4341 (dovecot)
   CGroup: /system.slice/dovecot.service
           ├─4341 /usr/sbin/dovecot -F
           ├─4345 dovecot/anvil
           ├─4346 dovecot/log
           └─4348 dovecot/config

Aug 01 17:16:26 mimvp-sz2 systemd[1]: Starting Dovecot IMAP/POP3 email server...
Aug 01 17:16:26 mimvp-sz2 systemd[1]: Started Dovecot IMAP/POP3 email server.
Aug 01 17:16:26 mimvp-sz2 dovecot[4341]: master: Dovecot v2.2.10 starting up for imap, pop3, lmtp (core dumps disabled)

● saslauthd.service - SASL authentication daemon.
   Loaded: loaded (/usr/lib/systemd/system/saslauthd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2018-08-01 10:23:39 CST; 6h ago
 Main PID: 492 (saslauthd)
   CGroup: /system.slice/saslauthd.service
           ├─492 /usr/sbin/saslauthd -m /run/saslauthd -a pam
           ├─493 /usr/sbin/saslauthd -m /run/saslauthd -a pam
           ├─494 /usr/sbin/saslauthd -m /run/saslauthd -a pam
           ├─495 /usr/sbin/saslauthd -m /run/saslauthd -a pam
           └─496 /usr/sbin/saslauthd -m /run/saslauthd -a pam

Aug 01 10:23:39 mimvp-sz2 systemd[1]: Starting SASL authentication daemon....
Aug 01 10:23:39 mimvp-sz2 systemd[1]: Started SASL authentication daemon..
Aug 01 10:23:39 mimvp-sz2 saslauthd[492]: detach_tty      : master pid is: 492
Aug 01 10:23:39 mimvp-sz2 saslauthd[492]: ipc_init        : listening on socket: /run/saslauthd/mux
Hint: Some lines were ellipsized, use -l to show in full.

 

7、配置客户端

上面的 pop3 和 smtp 服务器为第一步中配置的MX解析记录:

mail.mimvp.com

1)Outlook配置为例:

点子邮件地址:noreply@mimvp.com
类型:IMAP/POP3(任选其一,推荐IMAP)
用户名:noreply
密码:pwdOfMail
接收服务器:mail.mimvp.com 
接收端口:143
接收是否使用SSL连接:不使用
发送服务器:
发送端口:25
发送是否使用SSL连接:不使用

 

2)以 mail、mailx 命令为例:

vim /etc/mail.rc

set from=noreply@mimvp.com
set smtp=mail.mimvp.com
set smtp-auth-user=noreply
set smtp-auth-password=pwdOfMail
set smtp-auth=login

这里,特别要注意 set smtp-auth-user=noreply 是本机系统账户名 noreply,一定不要写成 noreply@mimvp.com

否则用户名和密码不一致,会报错信息认证失败:

Aug  1 21:35:52 mimvp-sz postfix/smtpd[31548]: connect from mimvp[120.24.177.37]
Aug  1 21:35:56 mimvp-sz postfix/smtpd[31548]: warning: mimvp[120.24.177.37]:
SASL LOGIN authentication failed: UGFzc3dvcmQ6
Aug  1 21:35:56 mimvp-sz postfix/smtpd[31548]: lost connection after AUTH from mimvp[120.24.177.37]
Aug  1 21:35:56 mimvp-sz postfix/smtpd[31548]: disconnect from mimvp[120.24.177.37]

 

经过测试,发现发送邮件只有 163 个人邮箱可以收到邮件,其它 qq个人邮箱、qq企业邮箱,都收不到邮件

163 个人邮箱收到邮件如下:

 

三、待解问题

1、本文是在阿里云开放了 25端口号服务器上测试的

2、若阿里云禁用了 25端口号,如何搭建 smtps 465 端口号的邮箱服务器呢?

3、本文发送邮件只有 163个人邮箱成功,qq个人和企业邮箱都收不到邮件,如何解决?

感兴趣喜欢深入研究的筒子,欢迎交流、赐教,留言给出您的解决方案,谢谢。

 

 

参考推荐

Centos7 使用 sendmail 发送邮件

Centos7 配置 sendmail、postfix 端口号25、465

Linux shell 发送 email 邮件

Linux shell 发送 email 附件

CentOS 6使用mutt+msmtp发送邮件

POP3、SMTP、IMAP 的作用和联系

Linux用Sendmail架设Mail服务器

CentOS SendMail总结

Python学习入门(5)——发送邮件

Python 七种邮件内容发送方法

Python smtp 群发邮件

8款免费企业邮箱

QQ企业邮箱集成JIRA邮件

CenterOS 搭建 SVN Server

SAE搭建WordPress