linux系统定时发送邮件
Linux Centos7系统下利用自带的mail发送邮件服务
简介
本章分为五部分。
第一部分是基于虚拟机下的CentOS 7环境定时发送邮件;
第二部分是基于在阿里云购买的CentOS 7服务器环境定时发送邮件;
第三部分是群发邮件的测试。
第四部分是注意事项
第五部分是配置mail定时发送邮件碰到的问题以及解决方案
一、虚拟机CentOS 7环境
若在自己的linux系统中或者虚拟机环境下,发送邮件的非加密端口25是开放的,可以直接发送,下方利用CentOS 7自带邮件系统完成每隔一分钟执行一次发邮件服务。配置如下:
①写一个shell脚本[root@localhost ~]#vi mail.sh
#!/bin/sh
echo '你好'|mail -s '主题' xxxxxxx@qq.com
②设置发件人信息
[root@localhost ~]# vi /etc/mail.rc
#末尾加入以下参数
set bsdcompat
set from=xxxxxxxx@163.com #发送邮件后显示的邮件发送方
set smtp=smtp.163.com #网易邮箱smtp邮件服务器地址
set smtp-auth-user=xxxxxxxx@163.com #发件人邮箱
set smtp-auth-password=********* #发件人邮箱密码
set smtp-auth=login #动作为登录
③设置定时任务
[root@localhost ~]# crontab -e
#编辑内容为:
*/1 * * * * bash /root/mail.sh
二、在阿里云服务器的环境下
阿里云封闭25端口,所以不能通过默认的端口(25)发送邮箱,需要通过邮箱服务器的加密端口(465)来完成发送邮件的服务。配置流程如下:
①[root@localhost ~]# vi /etc/mail.rc
#【利用腾讯的企业邮箱发送,最后一句是证书存放位置,届时发送邮件的时候,会通过此证书,来对加密端口进行解密,此处加密端口是465】
#在末尾加入以下内容
set bsdcompat
set from=xxxxxxxx@nascent.cn #发送邮件后显示的邮件发送方
set smtp=smtps://smtp.exmail.qq.com:465 #腾讯企业邮箱smtp邮件服务器地址
set smtp-auth-user=xxxxxxxx@nascent.cn #发件人邮箱
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/
#获取邮件服务器证书内容(可分开执行查看过程)
[root@localhost ~]# echo -n | openssl s_client -connect smtp.exmail.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 ./ -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 '主题' xxxxxxxx@qq.com
结果又报错了:Error initializing NSS: Unknown error -8015.
此报错是邮件发送异常时返回的错误,这类错误可以理解成是没有证书或创建的证
书未生效。通过网上找了很多方法都不行,后面看到这篇文章
https://www.unixhot.com/article/303
执行了下面这句话
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -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标签顺利解决问题。
linux系统定时发送邮件的更多相关文章
- linux系统定时重启tomcat
#touch auto-start.sh [root@Linux opt]# echo $LANGen_US.UTF-8 #vim auto-start.sh #!/bin/sh export LAN ...
- linux系统如何发送邮件
安装应用yum install mailx sendmail -y接着修改/etc/mail.rc文件,添加一下参数#末尾添加 zabbix 发送告警信息邮箱(按照自己的情况修改)set from= ...
- linux下定时发送邮件
at命令可以在某个时间运行某个程序,而mail可以以命令行的方式把存于一个文本中的邮件正文发送抄送出去. 具体用法: 1. 把email正文准备好,比如写在email.txt里 2. 然后写一个脚 ...
- Linux系统定时备份网站文件到七牛云存储脚本
1.七牛云账号注册. 有些朋友可能会问为什么要备份到七牛云?很简单,七牛云免费注册就能获取1G的存储空间,只要简单几步操作完成实名认证即可获取10G的存储空间,对于一般个人站点来说已经足够备份使用了. ...
- linux系统时间同步
1.linux系统时间同步[root@xuegod62 ~]# /usr/sbin/ntpdate ntp1.aliyun.com2.linux系统定时同步[root@xuegod62 ~]# ech ...
- linux系统下邮件的发送
在linux系统下发送邮件一般都要要求本地的机器必须安装和启动Sendmail服务,配置非常麻烦,而且会带来不必要的资源占用. 其实我还可以安装mailx软件,通过修改配置文件可以使用外部SMTP服务 ...
- Linux学习之十-Linux系统时间
Linux系统时间 1.date命令用于查看以及修改Linux系统的时间,关于date命令的详细帮助文档如下 [root@localhost ~]# date --help Usage: date [ ...
- Linux系统Shutdown命令定时关机详解
转自:http://www.bootf.com/490.html Linux系统下的shutdown命令用于安全的关闭/重启计算机,它不仅可以方便的实现定时关机,还可以由用户决定关机时的相关参数.在执 ...
- python (18)在linux中如何实现定时发送邮件
最近要用到,定时发送邮件功能: 如何定时,当然要用到linux中crontab了 如下的代码能够定时发送邮件 #!/usr/bin/env python # -*- coding=utf-8 -*- ...
随机推荐
- 上传文件的C#代码
1 <%@ WebHandler Language="C#" Class="UpLoadFile" %> 2 3 using System; 4 u ...
- MySQL索引原理及SQL优化
目录 索引(Index) 索引的原理 b+树 MySQL如何使用索引 如何优化 索引虽好,不可滥用 如何验证索引使用情况? SQL优化 explain查询执行计划 id select_type tab ...
- Unity3D_01_各种寻找GameObject方法
1.GameObject.Find(): 寻找Hierarchy面板中的activie 不为false的游戏对象: 路径如官方事例写法: public class ExampleClass : Mon ...
- .Net基础篇_学习笔记_第六天_for循环的嵌套_乘法口诀表
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- .Net基础篇_学习笔记_第六天_For循环语法
For循环:专门处理已知循环次数的循环. 小技巧:连续敲击两下TAB键循环体自动搭建完成. For循环语法: for(表达式1;表达式2;表达式3){ 循环体;}表达式1一般为声明循环变量,记录循环 ...
- Python文件访问编码格式问题UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position xx: 解决方案
1.Python读取文件 # .打开文件 file = open("ReadMe") # .读取文件类容 text = file.read() print(text) # .关闭文 ...
- Mysql数据处理/行转列/列转行/分割/拼接/数据复制汇总
mysql数据处理记录(使用的 Workbench) 生成随机数 逗号或分号拼接的字符串分割成多行 多行数据转化成用逗号拼接的字符串 将A表的数据添加到B表 一.生成随机数 生成18位:(19位就加颗 ...
- 安卓APP开发简单实例 结对编程心得
开始说起搞APP开发,自己和小伙伴的编程水平真的很低,无从下手,只有在网上找点案列,学习着怎样开发,结对编程还是面临着许多问题的,大家的水平有所差异和编程风格不同,我们用eclipse做了一个仿微信登 ...
- SpringBootSecurity学习(02)网页版登陆配置类代替默认配置
增加Security配置类 前面演示了一个简单的登录入门例子,使用springboot-security默认的配置实现,虽然非常简单,但是基本实现了登录功能.不过在生产环境下,显然不能仅仅使用如此简单 ...
- ASP.NET Core 3.0 WebApi中使用Swagger生成API文档简介
参考地址,官网:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/getting-started-with-swashbuckle?view ...