不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。

导航

Centos7搭建mailx邮件应用

Posted on 2021-04-02 11:03  三年三班王小朋  阅读(337)  评论(0编辑  收藏  举报

邮件发送原理图

邮件用户代理(MUA,Mail User Agent)
邮件传送代理(MTA,Mail Transport Agent)
邮件分发代理(MDA,Mail Deliver Agent)

邮件发送过程:
1、A用户通过MUA编写好邮件,并发送
2、该邮件通过MTA,首先发送到QQ邮件服务器
3、QQ邮件服务器分析到目的邮箱地址是163,所以再通过MTA传送到163邮件服务器
4、163邮件服务器收到该邮件
5、由于使用163邮箱的用户有很多,再通过MDA把该邮件发送到正确的用户
6、B用户通过MUA就可以查看A用户发送的邮件。

ps:
通俗的说MUA就是用户使用的客户端,而MTA则是真正发送邮件的发送进程,MUA编写的邮件最终也交由MTA发送至目标端。
mail和mailx即为负责查看、编写邮件和向MTA发送邮件的MUA。mailx是mail的功能加强版。
sedmail,postfix就是负责邮件传输的MTA,将邮件从一个MTA传送至另一个MTA。

使用mail和sendmail发送邮件

CentOS 7+

QQ企业邮箱: smtp.exmail.qq.com

1、安装mail和sendmail

yum install -y mailx sendmail  # mail是mailx的别名,mail是MUA,sendmail是MTA

2、配置mail

mail系统及配置文件为/etc/mail.rc,用户级配置文件为~/.mailrc。这里使用全局配置文件,在/etc/mail.rc文件最后添加如下内容:

set smtp=smtps://smtp.xxx.com:465   # 这里填入smtp地址,这里的xxx为qq或者163等,如果用的云服务器,安全组策略要开放465端口,入站和出站都要开放该端口
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   # 证书所在目录
set from=user@xxx.com               # 设置发信人邮箱和昵称

#QQ邮箱的授权码获取方式为:进入邮箱后–>设置–>账户,开启下图1中的SMTP,点击2生成授权码
#POP3/SMTP协议
接收邮件服务器:pop.exmail.qq.com ,使用SSL,端口号995
发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465

3、添加证书

mkdir -pv /etc/pki/nssdb/qq.crt
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/pki/nssdb/qq.crt  #获取邮件服务器证书
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /etc/pki/nssdb -i /etc/pki/nssdb/qq.crt  #将证书添加进受信任数据库表
certutil -A -n "GeoTrust Global CA" -t "C,," -d /etc/pki/nssdb -i /etc/pki/nssdb/qq.crt
certutil -L -d /etc/pki/nssdb  #列出指定目录下的证书

1、修改配置(/etc/mail.rc)
将 set ssl-verify=ignore 忽略SSL set ssl-verify=strict 检查SSL
并使用 systemctl restart sendmail 重启 sendmail 使配置文件变得有效

2、获取邮件服务器证书:
echo -n "" | openssl s_client -connect smtp.xxx.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/pki/nssdb/xxx.crt  #这里的xxx填写qq、163等       
示例:echo -n "" | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/pki/nssdb/qq.crt

3、将证书添加到受信任列表:
certutil -A -n 'xxx' -t "P,P,P" -d . -i /etc/pki/nssdb/xxx.crt
-A:表示添加
-n:nickname,可以随意取,例如126或qq
-t:表示受信任的标签,可取值是t/c/p三种或者其组合,
-d:表示证书所在目录
-i:指示证书文件的位置。

其它参数可以 man certutil 查看
示例:certutil -A -n 'qq' -t "P,P,P" -d /etc/pki/nssdb -i /etc/pki/nssdb/qq.crt

4、常见命令
查看邮件日志:vi /var/log/maillog
配置邮件:vi /etc/mail.rc
编辑主机地址:vi /etc/hosts
发送邮件测试:echo "mail content" | mail -s "title" ××@qq.com
#echo "123"|mail -s "hello test" 860871133@qq.com

报错解决方案:
Error in certificate: Peer's certificate issuer is not recognized.”提示。证书并没有得到认可,需要再运行一下如下命令:
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
说明:先找到证书位置,在运行"certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu"  -d ./ -i qq.crt " 。
发送成功,然而,我并没有解决报错问题,期待其他解决方案