Linux Centos7系统下利用自带的mail发送邮件服务

您所在的位置:网站首页 服务器自带系统 Linux Centos7系统下利用自带的mail发送邮件服务

Linux Centos7系统下利用自带的mail发送邮件服务

2024-06-29 14:17| 来源: 网络整理| 查看: 265

Linux Centos7系统下利用自带的mail发送邮件服务 简介一、虚拟机CentOS 7环境二、在阿里云服务器的环境下三、群发邮件测试四、注意事项五、配置mail定时发送邮件碰到的问题以及解决方案

简介

本章分为五部分。 第一部分是基于虚拟机下的CentOS 7环境定时发送邮件;

第二部分是基于在阿里云购买的CentOS 7服务器环境定时发送邮件;

第三部分是群发邮件的测试。

第四部分是注意事项

第五部分是配置mail定时发送邮件碰到的问题以及解决方案

一、虚拟机CentOS 7环境

若在自己的linux系统中或者虚拟机环境下,发送邮件的非加密端口25是开放的,可以直接发送,下方利用CentOS 7自带邮件系统完成每隔一分钟执行一次发邮件服务。 配置如下:

[root@localhost ~]#vi mail.sh #!/bin/sh echo '你好'|mail -s '主题' [email protected] #②设置发件人信息 [root@localhost ~]# vi /etc/mail.rc #末尾加入以下参数 set bsdcompat set [email protected] #发送邮件后显示的邮件发送方 set smtp=smtp.163.com #网易邮箱smtp邮件服务器地址 set [email protected] #发件人邮箱 set smtp-auth-password=********* #发件人邮箱密码 set smtp-auth=login #动作为登录 ③设置定时任务 [root@localhost ~]# crontab -e */1 * * * * bash /root/mail.sh #每分钟执行一次 mail.sh脚本 二、在阿里云服务器的环境下

阿里云封闭25端口,所以不能通过默认的端口(25)发送邮箱,需要通过邮箱服务器的加密端口(465)来完成发送邮件的服务。配置流程如下:

①[root@localhost ~]# vi /etc/mail.rc #【利用腾讯的企业邮箱发送,最后一句是证书存放位置,届时发送邮件的时候,会通过此证书,来对加密端口进行解密,此处加密端口是465】 #在末尾加入以下内容 set bsdcompat set [email protected] #发送邮件后显示的邮件发送方 set smtp=smtps://smtp.exmail.qq.com:465 #腾讯企业邮箱smtp邮件服务器地址 set [email protected] #发件人邮箱 set smtp-auth-password=NxybYwMkBMy4zp4n #发件邮箱随机密码(设置-微信绑定-安全登录-客户端专用密码) set smtp-auth=login #动作为登录 set ssl-verify=ignore #忽略ssl认证方式 set nss-config-dir=/home/zs/.certs #证书所在目录

在这里插入图片描述

②然后是对.certs文件进行创建,执行如下命令行

#创建证书目录

#添加证书到数据库 [root@localhost ~]# mkdir -p /home/zs/.certs/ #获取邮件服务器证书内容(可分开执行查看过程) 如果是腾讯企业邮箱 用 smtp.exmail.qq.com:465 [root@localhost ~]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /home/zs/.certs/qq.crt #添加证书到数据库 [root@localhost ~]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d /home/zs/.certs -i /home/zs/.certs/qq.crt [root@localhost ~]# certutil -A -n "GeoTrust Global CA" -t "C,," -d /home/zs/.certs -i /home/zs/.certs/qq.crt #指明受信任证书(因为上面两个-t后的C标签是会报错的,Pu可以防止报错) [root@localhost ~]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /home/zs/.certs/ ./ -i qq.crt Notice: Trust flag u is set automatically if the private key is present. (注意:如果私钥存在,则会自动设置信任标志u。) #列出指定目录下的证书 [root@localhost ~]# certutil -L -d /home/zs/.certs

在这里插入图片描述

三、群发邮件测试

1、准备两个文件mail.sh和task.txt 在这里插入图片描述 2、shell脚本mail.sh的内容 在这里插入图片描述 3、Task.txt存储的是群发人的邮箱 在这里插入图片描述 4、编辑crontab定时任务内容

[root@localhost home]# crontab -e

在这里插入图片描述

四、注意事项

Windows下编辑的文件上传到linux系统中,会出现编码等问题,可以在notepad++中设定如下: 编辑-文档格式转换-转换为UNIX格式 在这里插入图片描述

五、配置mail定时发送邮件碰到的问题以及解决方案

1、在编辑/etc/mail.rc配置文件时,将set smtp=smtps://smtp.exmail.qq.com:465 写成set smtp=smtp://smtp.exmail.qq.com:465 在这里插入图片描述 导致在测试发送邮件时报Unexpected EOF on SMTP connection这个错。 是由于端口只支持SMTPS导致,将协议改成smtps://即可。 2、在进行添加证书到数据库是报错以下错误 certutil -A: trust is required for this command (-t). (certutil -A:此命令(-t)需要信任) 在这里插入图片描述 提示我们执行这个命令需要在-t后面添加受信任证书标签,一开始以为这个警告可

以忽略,于是以为设置好了,可以进行测试了:

[root@localhost ~]# echo ‘你好’|mail -s ‘主题’ [email protected]

结果又报错了:Error initializing NSS: Unknown error -8015.

在这里插入图片描述 此报错是邮件发送异常时返回的错误,这类错误可以理解成是没有证书或创建的证

书未生效。通过网上找了很多方法都不行,后面看到这篇文章

https://www.unixhot.com/article/303

执行了下面这句话

[root@localhost ~]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d /home/zs/.certs/ ./ -i qq.crt

在这里插入图片描述 结果收到了邮件,一切ok。 3、基于第二点详解

https://segmentfault.com/a/1190000015143877这篇文章使我明白为何会报以下错误:

Error initializing NSS: Unknown error -8015

以下内容摘自上面链接文章的内容,稍作整理:

如果测试发送邮件出现一行警告:“Error in certificate: Peer’s certificate issuer is not recognized.”。这是由于使用加密通信,但客户端不能确认证书是否真实。如果我们将配置中的set ssl-verify=ignore改成set ssl-verify=strict,连接将直接中断而不会继续发邮件。 要解决这个警告,需要将邮件服务器的证书加入到信任列表。操作步骤如下: 获取邮件服务器证书:

#465端口 echo -n "" | openssl s_client -connect smtp.xxx.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > xxx.crt # 587端口 echo -n | openssl s_client -starttls smtp -connect smtp.xxx.com:587 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > xxx.crt

#也可以直接在浏览器上打开网页版,保存证书为PEM(base64格式)格式然后 上传到服务器

将证书添加到受信任列表:

certutil -A -n 'xxxx' -t "P,P,P" -d . -i ./xxx.crt

上述命令中 -A表示添加; -n是nickname,可以随意取,例如126或qq; -t表示受信任的标签,可取值是t/c/p三种或者其组合; -d表示证书所在目录; -i指示证书文件的位置。 在配置文件中更改证书目录:

#指向证书文件目录

set nss-config-dir=/path/to/cert-dir

网上许多教程的-t标签都是"C,",实践中发现使用该标签仍会报错(gmail的证书 是google自己签发的,用C标签没问题,许多博主估计没试就直接抄来)。通过查 阅certutil的用法,使用P标签顺利解决问题



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3