CentOS7 使用 postfix 发送邮件
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
一、准备工作
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 | 默认 | 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、postfix 端口号25、465
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2018-10-26 05:32:50
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!