目录
文章目录
1. 概述
在linux服务器上(我这里是Centos7.x)我们一般是通过mail命令来进行邮件发送的,mail, mailx都是收发邮件用的,类似浏览器的作用,可以用作邮件用户代理(MUA,Mail User Agent);
而sendmail是做邮件服务器的,类似apache, nginx的作用,可以用作邮件传输代理(MTA,Mail Transport Agent);
2. 邮件发送及接收原理
2.1 邮件的发送过程
-
邮件传输过程采用的协议:
SMTP(Simple Mail Transfer Protocal)是一组用于由源地址到目的地址传送邮件的规则,由它来控制邮件的中转方式,属于TCP/IP协议,帮助每台计算机在发送或中转邮件时找到下一个目的地。
-
邮件服务器的传输过程如上所示,其几个重要组件如下:
1)邮件用户代理(MUA,Mail User Agent)即邮件客户端软件,如Windows的Outlook,客户通过它来浏览、写和收发邮件;
2)邮件传输代理(MTA,Mail Transport Agent)即邮件服务器,类似apache, nginx的作用,当你在MUA(如outlook)上点发邮件时,其实它是把邮件发到MTA(如SendMail, Postfix),通过MTA实现发邮件的功能;
3)邮件分发代理(MDA,Mail Deliver Agent) MDA是挂在MUA下的一个小功能,它的主要功能是分析邮件的表头,决定邮件去向。
2.2 邮件的接收过程
-
邮件接收所需要的协议有两种:
1)POP3:它规定怎样将个人计算机连接到Internet 的邮件服务器和下载电子邮件的协议,是Internet电子邮件的第一个离线协议标准,当MUA收到邮件后,该协议将默认删除Mailbox里的内容;
2)IMAP:当MUA收到邮件后,该协议不删除Mailbox里的内容,所以一定要对每个用户的Mailbox进行容量限制。
-
邮件接收需要的组件:
MRA(Mail Retrival Agent):MUA(邮件客户端软件)向MRA发送请求接收邮件。
2.3 实例说明
假如A用户使用的是QQ邮箱,B用户使用的是163邮箱,A现在向B发送一封邮件。流程如下:
1、A用户通过MUA(邮件客户端软件)编写好邮件,并点击发送按钮;
2、该邮件通过MTA,首先发送到QQ邮件服务器;
3、QQ邮件服务器分析到目的邮箱地址是163邮箱,所以再通过MTA传送到163邮件服务器;
4、163邮件服务器收到该邮件,再对该邮件的表头进行分析,获取邮件实际用户;
5、由于使用163邮箱的用户有很多,再通过MDA把该邮件发送到正确的用户;
6、B用户通过MUA(邮件客户端软件)就可以查看A用户发送自己的邮件了。
我们可以简单理解为:sendmail 服务跟 mail 命令能不能发邮件没关系。发邮件只有要 too@too.com 这个地址就行了,查询 too.com MX记录得到这个邮箱 SMTP 服务的地址,直接往这个地址丢就好了。
MUA,MTA这种说法太学术了,说白了MUA就是邮件客户端,thunderbird之类的;MTA就是邮件服务器,比如sendmail,其他的什么MSA,MDA,MRA都是中间环节可以无视。
3. 使用mail和sendmail发送邮件
3.1 安装mail和sendmail
[root@myhost ~]# rpm -qa mailx sendmail
[root@myhost ~]# yum install -y mailx sendmail
[root@myhost ~]# rpm -qa mailx sendmail
mailx-12.5-19.el7.x86_64
sendmail-8.14.7-6.el7.x86_64
3.2 配置mail
mail配置文件为/etc/mail.rc,用户级配置文件为~/.mailrc。这里使用全局配置文件,在/etc/mail.rc文件最后添加如下内容:
set smtp=smtps://smtp.xxx.com:465/25 # 这里填入smtp地址,这里的xxx为qq或者163等,如果用的云服务器,安全组策略要开放465/25端口,入站和出站都要开放该端口
set from=user@xxx.com # 设置发信人邮箱和昵称(可以随便取)
set smtp-auth=login # 认证方式
set smtp-auth-user=user@xxx.com # 这里输入邮箱账号
set smtp-auth-password=password # 这里填入密码,这里是授权码而不是邮箱密码
set ssl-verify=ignore # 忽略证书警告
set nss-config-dir=/etc/pki/nssdb # 证书所在目录
3.3 获取QQ邮箱的授权码
获取方式为:进入邮箱后–>设置–>账户,开启下图中的SMTP,再点击生成授权码
3.4 启动sendmail
[root@myhost ~]# systemctl start sendmail
[root@myhost ~]# systemctl status sendmail
3.5 通过mail命令发送邮件
/etc/mail.rc配置文件添加的内容:
set from=xxxxxxx@163.com
set smtp="smtp.163.com:25"
set smtp-auth-user="xxxxxxx@163.com"
set smtp-auth-password="xxxxx"
set smtp-auth=login
发送邮件的命令:
echo '邮件内容' | mail -s '邮件标题' xxx接收邮件的邮箱地址
或者
mail -s '邮件标题' 收件人邮箱 < xxx文件
示例:
[root@myhost ~]# echo 'test' | mail -s 'test' xxx@qq.com