邮件相关名词
MUA:
用户代理端,即用户使用的写信、收信客户端软件。常用的MUA有:OE、Outlook、FoxMail、Thunderbird。Mutt。
MTA:
邮件传输代理工具,通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。常用的MTA有:SendMail(邮件的鼻祖)、Qmail、Postfix(比sendmail兼容效率更高)、Exim、Exchange。
MDA:
邮件投递代理,投递代理则从信件传输代理取得信件传送至最终用户的邮箱。常用的MDA有:ProcMail(Postfix默认的邮件投递工具)、MailDrop
MRA:
邮件取回代理,使用POP3或IMAP4协议工作。一般用于从用户信箱取回邮件到邮件用户代理客户端。常用的MRA有:Dovecot
WebMail:
基于Web的电子邮件收发系统,扮演邮件用户代理角色,一般而言,WebMail系统提供邮件收发、用户在线服务和系统服务管理等功能。WebMail的界面直观、友好,不需要借助客户端,免除了用户对E-mail客户软件(如:Foxmail、Outlook等)进行配置时的麻烦,只要能上网就能使用WebMail,方便用户对邮件进行接收和发送。WebMail使得E-mail在Internet上的应用广泛。常用的Webmail有:Openwebmail、Squirrelmail(Centos系统自带)、Extmail。
Mail Relay:
邮件中继。一封邮件只要不是发送给本域内用户的,比如从当前域发送到另一个域,或从当前域发送到另一个域然后转到另外一个域的,这就属于中继。但是一般邮件服务器都会允许本地或本域内的用户进行中继。不然就只能在本域内发送邮件而不能给外部邮箱发送邮件。Postfix默认只能基于IP地址做中继认证。
SASL:
简单认证安全层,是一种用来扩充C/S模式验证能力的机制。在Postfix可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。常用的Sasl有:cyrus-sasl(Redhat系列自带的SASL认证框架)、dovecot-sasl(dovecot组件带的SASL认证框架)、courier-authlib。
邮件相关协议
POP3:
邮局协议第3版,工作在TCP的110端口。主要用于支持使用客户端远程管理在服务器上的电子邮件。
POP 协议支持“离线”邮件处理。其具体过程是:邮件发送到服务器上,电子邮件客户端调用邮件客户机程序以连接服务器,并下载所有未阅读的电子邮件。
这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人终端机器上。一旦邮件发送到个人终端机器上,邮件服务器上的邮件将会被删除。但目前的POP3邮件服务器大都可以“只下载邮件,服务器端并不删除”,也就是改进的POP3协议。
IMAP4:
互联网应用协议第四版,工作在TCP的143端口。IMAP4协议与POP3协议一样,但是IMAP4协议同POP3协议相比更高级。
IMAP4支持协议客户机在线或者离开访问并阅读服务器上的邮件,还能交互式的操作服务器上的邮件。IMAP4协议更人性化的地方是用户可以通过客户端直接对服务器上的邮件进行操作(指:在线阅读邮件、在线查看邮件主题、大小、发件地址等信息)。用户还可以在服务器上维护自己邮件目录(指:移动、新建、删除、重命名、共享、抓取文本等操作)。
SMTP:
简单邮件传送协议,工作在TCP的25端口。它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。无法做到认证、邮件存放等功能。
sendmail的配置
安装sendmail
yum -y install sendmail*
设置邮件服务器提供邮件服务的域名
echo "wupanfeng.com" >> /etc/mail/local-host-names
配置sendmai.mc
cp /etc/mail/sendmail.mc{,.bak}
cp /etc/mail/sendmail.cf{,.bak}
vim /etc/mail/sendmail.mc
#118行,修改sendmail监听服务器地址
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
#52,53行,开启SMTP所有用户必须认证
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
生成sendmail.cf文件
cd /etc/mail
m4 sendmail.mc > sendmail.cf
启动sendmail
systemctl start sendmail
systemctl enable sendmail
配置SMTP认证
saslauthd服务提供SMTP用户验证,检查用户名和密码是否正确,基于系统shadow文件来实现验证配置
#安装sendmail会依赖安装cyrus-sasl
systemctl start saslauthd
systemctl enable saslauthd
dovecot服务配置
dovecot是一个开源的IMAP和POP3邮件服务器,dovecot为邮件用户代理(MUA)提供了一种访问服务器上存储邮件的方法,但是它并不负责从其他邮件服务器接受邮件,只是将已存储在邮件服务器上的邮件通过MUA显示出来,IMAP和POP3是用于连接MUA与邮件存储服务器的两种常见的协议。
安装
yum -y install dovecot*
配置
vim /etc/dovecot/dovecot.conf
#24行
protocols = imap pop3 lmtp
#30行
listen = *
cd /etc/dovecot/conf.d
vim 10-ssl.conf
ssl = no #关闭ssl认证
vim 10-auth.conf
disable_plaintext_auth = no #开启明文身份验证
vim 10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u #设置邮件存储位置
创建邮箱用户
useradd -s /sbin/nologin wupanfeng
echo "123456" | passwd --stdin wupanfeng
useradd -s /sbin/nologin test
echo "123456" | passwd --stdin test
启动
systemctl start dovecot
systemctl enable dovecot
配置域名解析
下图为阿里云截图:
如果是内网环境,则配置hosts文件(注意:这里是配置客户端的hosts,我的测试客户端是我的笔记本电脑)
vim /etc/hosts
#添加
192.168.1.246 mail.wupanfeng.com wupanfeng.com
Windows的hosts文件在:C:\Windows\System32\drivers\etc
通过foxmail测试
可以实时打开日志,便于及时发现错误。
tail -f /var/log/maillog
报错:
日志:
Oct 10 15:11:48 iz8y5su8kb7njlz dovecot: pop3(wupanfeng): Error: fchown(/home/wupanfeng/mail/.imap, group=12(mail)) failed: Operation not permitted (egid=1001(wupanfeng), group based on /var/mail/wupanfeng - see http://wiki2.dovecot.org/Errors/ChgrpNoPerm)
Oct 10 15:11:48 iz8y5su8kb7njlz dovecot: pop3(wupanfeng): Error: Couldn't open INBOX: Permission denied
Oct 10 15:11:48 iz8y5su8kb7njlz dovecot: pop3(wupanfeng): Couldn't open INBOX: Permission denied top=0/0, retr=0/0, del=0/0, size=0
原因:此错误中有两个问题
问题一:没有/home/wupanfeng/mail/.imap目录
问题二:无法打开INBOX:权限被拒绝
问题一解决方法:
mkdir /home/wupanfeng/mail/.imap
问题二解决方法:
mkdir /home/wupanfeng/mail/.imap/INBOX
chown -R wupanfeng:wupanfeng /home/wupanfeng/
邮件收发测试
绑定两个邮箱账号,两个账号间相互收发邮件
当给外部邮箱(163、qq等)发送邮件时,会出现下图错误
解决方法:
vim /etc/mail/access
#添加
192.168.1.113 RELAY
postfix的配置
使用postfix搭建邮件服务器步骤和上边一样,只需要将sendmail替换成postfix就好了。(注意:需要卸载sendmail)
安装postfix
yum -y install postfix*
配置postfix
cd /etc/postfix/
cp main.cf{,.bak}
vim main.cf
myhostname = mail.wupanfeng.com #邮件服务器主机名称
mydomain = wupanfeng.com #域名域
myorigin = $mydomain #邮箱后缀(@后的内容)
inet_interfaces = all #监听的网络端口
inet_protocols = ipv4 #监听的ip协议
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain #能够接受信件的主机名称(主要是再增加收信件的网络名称)
mynetworks = 0.0.0.0/0 #设定信任的用户端,当要寄信时,会参考此值,若非信任用户,则不会把你的信件转到其他的MTA主机上
relay_domains = $mydestination #中继域
alias_maps = hash:/etc/aliases #别名路径
启动
systemctl start postfix
systemctl enable postfix
mail命令发送邮件
简单的邮件发送
[wpf@zhhs-mail ~]$ echo "这是一封测试邮件" | mail -s "这是一封测试邮件" xxxxxx@163.com
以文件的内容为邮件内容发信
[wpf@zhhs-mail ~]$ mail -s "不含附件测试邮件" xxxxxx@163.com < mail.txt
多用户邮件发送
[wpf@zhhs-mail ~]$ mail -s "多用户测试邮件" xxxxxx@163.com wupanfeng@wupanfeng.com test@wupanfeng.com < mail.txt
发送带附件的邮件
[wpf@zhhs-mail ~]$ mail -a mail.txt -s "带附件的邮件" xxxxxx@163.com < mail.txt
注意:如果使用的服务器是云主机(阿里云、腾讯云等)的话,只能内部发送邮件,不能给外部邮箱(163、qq等)发送邮件。因为云平台禁止了25端口的协议传输。