目录

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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐