linux利用mail和sendmail发送邮件

邮件发送原理图

在这里插入图片描述

MUA:Mail User Agent,邮件用户代理,用来编写,收发邮件
MTA:Mail Transfer Agent,邮件传输代理,将邮件传输到正确目的地
MDA:Mail Delivery Agent,邮件分发代理,将邮件分发到正确目的用户

以一个例子来说明上面的关系。假如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用户发送的邮件。

使用mail和sendmail发送邮件

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生成授权码
在这里插入图片描述
3、启动sendmail

systemctl start sendmail

4、通过mail命令发送邮件

echo '邮件内容' | mail -s '邮件标题' 收件人邮箱
或
mail -s '邮件标题' 收件人邮箱 < 邮件内容.txt
示例:
echo 'test' | mail -s 'test' xxxxxxxxxxx@139.com

5、解决警告

虽让能正确发送邮件,但是每次都会出现如下警告:
在这里插入图片描述
这是由于使用加密通信,但客户端不能确认证书是否真实。

解决方法如下:
1、修改配置(/etc/mail.rc)
	将 set ssl-verify=ignore 改成 set ssl-verify=strict 
	并使用 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
  • 9
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X+Y=Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值