目录
简介:
邮件系统包括:服务端(SMTP)和客户端(POP3,IMAP)
- SMTP简单邮件传输协议(port:25):应用层协议,由TCP提供可靠数据传输服务把邮件消息从发信人邮件服务器传送到收件人邮件服务器
- POP3邮局协议(port:110):具有存储转发功能。允许客户端下载服务器上的邮件,但在客户端的操作(如移动邮件,标记已读等),不会反馈到服务器上
- IMAP(port:143):Internet消息访问协议。为用户提供了有选择地从邮件服务器接收邮件的功能、基于服务器的信息处理功能和共享信箱功能。客户端的操作会反馈到服务器上
例如:当发送一封电子邮件信息时,信息会一台一台的服务器被传递,直到发送到收件人的电子邮件服务器。即信息被发送到负责传输邮件的服务器(邮件传输代理MTA),用于转发,收取用户邮件。经过若干个MTA后,最终到达收件人的MTA。MTA也称之为SMTP服务器。
收件人MTA会将电子邮件投递给邮件接收服务器(邮件投递代理MDA),可以过滤垃圾邮件。MDA会保存邮件并等待用户收取。MDA主要有两种协议:POP,IMAP。
MUA:邮件用户代理(用于收取邮件),如果MUA是用户电脑或其他设备上的一个程序。则称它为邮件客户端(outlook,网易邮箱大师等),及用户使用的写信,收信的客户端软件
前提:
为使用户的系统域名能被正确解析为相应的服务器地址,需要能够在互联网上被识别和查找到。这样邮件系统才能实现邮件的投递和接收。所以需要配置好DNS域名服务,包括MX记录和A记录的设置。
Sendmail安装配置
免费的邮件服务器软件,是一款经典的Linux系统下的邮件服务器。
(1)Sendmail环境版本
# 系统版本:Centos 7.6 64位
[root@tanbaobao ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
# Sendmail版本:sendmail-8.14.7-6.el7.x86_64
Openwebmail版本:
(2)Sendmail安装
[root@tanbaobao ~]# yum -y install sendmail*
(3)Sendmail服务配置
配置sendmail.cf服务,通过local-host-names设置邮件服务器提供邮件服务的域名为:XXX.XXX.cn/com等。
[root@tanbaobao mail]# cp /etc/mail/sendmail.mc /etc/mail/sendmail.mc.bak
[root@tanbaobao mail]# cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.bak
# 将域名输入到文件中
[root@tanbaobao mail]# echo "tourby.cn" >> /etc/mail/local-host-names
配置Sendmail监听服务器网卡地址为0.0.0.0:
# 将118行中的地址
118 DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA‘)dnl
# 修改为如下
[root@tanbaobao mail]# vi /etc/mail/sendmail.mc
118 DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA‘)dnl
或
sed -i ‘s/Addr=127.0.0.1/Addr=0.0.0.0/g‘ /etc/mail/sendmail.mc
# 修改sendmail.mc,如下两行,开启STMP所有用户必须认证,去掉前面的dnl
52 TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN‘)dnl
53 define(`confAUTH_MECHANISMS‘, `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN‘)dnl
使用md4生成sendmail.cf主配置文件:
[root@tanbaobao mail]# pwd
/etc/mail
[root@tanbaobao mail]# m4 sendmail.mc > sendmail.cf
重启服务
[root@tanbaobao mail]# /etc/init.d/sendmail restart
Restarting sendmail (via systemctl): [ OK ]
# 查看端口25
[root@tanbaobao mail]# ps -ef | grep sendmail
root 19989 1 0 16:09 ? 00:00:00 sendmail: accepting connections
smmsp 20000 1 0 16:09 ? 00:00:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue
root 20103 15043 0 16:10 pts/0 00:00:00 grep --color=auto sendmail
[root@tanbaobao mail]# netstat -tnl | grep 25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN
(4)配置SMTP认证
Saslauthd服务作用,提供SMTP用户验证,检查用户名会让密码是否正确,基于系统shadow文件来实现验证配置。默认系统安装,如果没有手动安装cyrus-sasl*
[root@tanbaobao mail]# systemctl restart saslauthd
[root@tanbaobao mail]# systemctl status saslauthd
Dovecot服务配置
Dovecot是一个开源的IMAP和POP3邮件服务器,支持Linux/Unix系统。作为IMAP和POOP3服务器,Dovecot为邮件用户代理(MUA)提供一种访问服务器上存储邮件的方法。但Dovecot并不负责从其他邮件服务器接收邮件。
Dovecot只是将已存储在邮件服务器上的邮件通过MUA显示出来,IMAP和POP3是用于连接MUA与邮件存储服务器的两种常见的协议。
# 版本:dovecot.x86_64 1:2.2.36-6.el7
[root@tanbaobao mail]# yum -y install dovecot*
去掉/etc/dovecot/dovecot.conf如下行前面的#号即可:
# 将24行前的注释去掉
[root@tanbaobao mail]# vi /etc/dovecot/dovecot.conf
24 protocols = imap pop3 lmtp
修改监听端口为本地所有地址:
# 将30 #listen = *, ::修改为如下
[root@tanbaobao mail]# vi /etc/dovecot/dovecot.conf
30 listen = *
(5)Sendmail配置完毕
Sendmail邮箱用户建立,可以用客户端收发邮件即正常。
[root@tanbaobao mail]# groupadd mailgroup
[root@tanbaobao mail]# useradd -g mailgroup -s /sbin/nologin tourby
[root@tanbaobao mail]# echo "tourby"|passwd --stdin tourby
[root@tanbaobao mail]# systemctl restart sendmail
[root@tanbaobao mail]# systemctl restart dovecot
[root@tanbaobao mail]# systemctl restart saslauthd
(6)将域名映射到邮件服务器
域名需要提前注册。我这里用的是腾讯云的服务器。步骤:登录腾讯云服务器地址>控制台>DNS解析>点击域名进入如下界面
点击添加记录>保存
还需要添加MX解析,记录值写域名,主机记录mail,记录类型MX
还需添加一个记录
测试mail.tourby.cn是否能ping通:[root@rhel8 shell]# ping mail.tourby.cn
邮件收发
在本机下载foxmail客户端软件,安装。启动>输入邮箱和密码,接收服务器类型选POP3
点击创建报错
修改dovecot配置文件:
# 将第8行注释,并添加第9行内容,即将ssl = no
[root@tanbaobao ~]# vi /etc/dovecot/conf.d/10-ssl.conf
8 # ssl = required
9 ssl = no
[root@tanbaobao ~]# systemctl restart dovecot
# 在10行下面将yes改为no
[root@tanbaobao ~]# vi /etc/dovecot/conf.d/10-auth.conf
10 #disable_plaintext_auth = yes
11 # 开启密码访问
12 disable_plaintext_auth = no
[root@tanbaobao ~]# systemctl restart dovecot
上面问题解决后又报错:
# 查看日志如果有报这样错误,是没有这个INBOX目录以及对应的权限
[root@tanbaobao ~]# tail -fn 100 /var/log/maillog
Jul 1 11:42:40 VM_0_10_centos dovecot: pop3(thy): Error: fchown(/home/thy/mail/.imap, group=12(mail)) failed
: Operation not permitted (egid=1001(thy), group based on /var/mail/thy - see http://wiki2.dovecot.org/Errors/ChgrpNoPerm)Jul 1 11:42:40 VM_0_10_centos dovecot: pop3(thy): Error: Couldn‘t open INBOX: Permission denied
Jul 1 11:42:40 VM_0_10_centos dovecot: pop3(thy): Couldn‘t open INBOX: Permission denied top=0/0, retr=0/0,
del=0/0, size=0
# 解决
[root@tanbaobao mail]# mkdir -p /home/thy/mail/.imap/INBOX
[root@tanbaobao mail]# chown -R thy.thy /home/thy/
# 查看日志发现有报错
[root@tanbaobao ~]# tail -f 100 /var/log/maillog
Jun 29 21:07:31 www dovecot: pop3(tourby): Error: Namespace ‘‘: Mail storage autodetection failed with home=/
home/tourby
...
# 将25行注释解开
[root@tanbaobao ~]# vi /etc/dovecot/conf.d/10-mail.conf
25 mail_location = mbox:~/mail:INBOX=/var/mail/%u
# 重启服务
[root@tanbaobao ~]# systemctl restart dovecot
[root@tanbaobao ~]# ll /var/mail/
报错:
[root@tanbaobao ~]# chmod 0600 /var/spool/mail/*
问题解决,nice
给我自己邮箱发送邮件:
也可以给自己发,用刚刚创建的邮件,然后点击收取才会在收件箱看到邮件 。发送给某个邮箱,该邮箱也需要点击收信,如果没有收到,那表示有问题,可以查看日志
[root@tanbaobao ~]# tail -fn 100 /var/log/maillog
Jun 30 15:04:38 www dovecot: pop3-login: Aborted login (auth failed, 1 attempts in 4 secs): user=<tourby@tour
by.cn>, method=PLAIN, rip=119.141.84.73, lip=172.16.0.10, session=<MKKfyUepHKh3jVRJ>Jun 30 15:04:42 www dovecot: pop3-login: Login: user=<tourby>, method=PLAIN, rip=119.141.84.73, lip=172.16.0.
10, mpid=6778, session=<5qzeyUepH6h3jVRJ>
[root@tanbaobao ~]# groupadd tourby
[root@tanbaobao ~]# chown -R tourby.tourby /home/tourby/
[root@tanbaobao ~]# systemctl restart dovecot
测试只能foxmail用户相互发送接收,发送给qq,163邮箱,接收不到,但是qq,163发送邮箱个诶foxmail可以收取到
Sendmail别名配置
用于实现邮件别名和群发功能,也可以创建用户组,将用户加入某个组中,实现群发。
/etc/下存在aliases和aliases.db两个文件,前者是文本文件,内容可见可编辑。后者是数据库文件,由aliases文件生成。
# 给users@tourby.cn发送邮件,则群发给user1@tourby.cn,user2@tourby.cn。设置完成后,通过newaliases指令生成新的aliases.db文件
users: user1,user2
systemctl restart saslauthd