很多时候我们需要在服务器上发送邮件,如定时发送网站日志,或者服务器信息状态,通过服务器触发自动发送邮件来达到定时或者及时通知到开发者。今天来讲一下如何在centos系统中配置邮件发送功能,其它的系统版本同样的操作方法
- 系统环境:系统为CentOS7,
- 使用软件:mailx 和 sendmail
- 邮箱:163邮箱
1、注册邮箱
这边以163邮箱为例,注册一个163邮箱,进入设置页面如上图所示。开启IMAP/SMTP服务,并创建一个授权码,授权码是一串字母,记录保存好,一旦创建页面关闭就无法在查看,只能重新创建。这里以163邮箱为例子,其它的邮箱服务商也是同样的操作操作方法。
2、安装 mailx和sendmail
yum -y install sendmail mailx
3、配置邮箱证书
由于会使用邮箱的ssl端口发送邮件,所以就需要配置邮箱的证书,这边以163邮箱证书配置为例,如果需要使用其它邮箱的基本也差不多的操作。
## 以下命令,一行一行执行即可
mkdir -p /root/.certs/
echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
certutil -L -d /root/.certs
cd /root/.certs/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 163.crt
2
3
4
5
6
7
8
4、配置mailx
找到系统根目录下的文件 /etc/mail.rc,在尾部追加以下配置
set from=seoddcn@163.com #可以随便填,为了不报错建议填写你刚才注册的163邮箱号,
set smtp=smtps://smtp.163.com:465 #此行请勿更改
set smtp-auth-user=xxx@163.com #填写你刚才注册的163邮箱号,
set smtp-auth-password=xxx #填写你刚才申请的授权码
set smtp-auth=login #此行请勿更改
set nss-config-dir=/root/.certs/ #此行请勿更改
set ssl-verify=ignore
2
3
4
5
6
7
- from:对方收到邮件时显示的发件人
- smtp:指定第三方发邮件的smtp服务器地址
- set smtp-auth-user:第三方发邮件的用户名
- set smtp-auth-password:用户名对应的密码,有些邮箱填的是授权码
- smtp-auth:SMTP的认证方式,默认是login,也可以改成CRAM-MD5或PLAIN方式
到了这一步服务器发送邮件的功能基本就已经实现了,然后就可以根据自己的需求来使用,这边已定时附送服务器日志文件为例子演示。实现方式以shell脚本控制邮件发送逻辑,搭配linux系统的crontab定时器来实现。
5、创建shell脚本
假设日志文件的路径是“/home/www/log/seodd_log.txt
在服务器“/home/www/sh”目录下创建脚本文件seodd.sh,并将一下代码添加到到此脚本文件
#!/bin/sh
# 快速发送
echo "邮件的内容" | mail -s "邮件主题" 收件人@qq.com
# 将日志文件内容作为邮件的内容进行发送
cat /home/www/log/seodd_log.txt|mail -s '邮件主题' 收件人@qq.com
# 将日志文件内容作为附件发送,加参数(-a 附件地址)
echo "邮件正文内容" | mail -s "邮件主题" -a /home/www/log/seodd_log.txt 收件人@qq.com
2
3
4
5
6
7
8
9
上面是常用的三种邮件内容发送形式,假设我们使用附件的形式发送,那么前面的代码可以注释掉,或者删除,但是第一行勿动;然后邮件内容,文件地址路径及发件人邮箱修改成你需要的即可,如果需要实现更复杂功能就可以研究下shell脚本编程。
6、创建定时器
# 切换到服务器根目录
cd /
# 打开crontab定时器
crontab -e
2
3
4
依次执行上述命令就进入到了crontab文件的编辑状态,相当于linux的vi编辑,输入内容前先敲击键盘i键
59 23 * * * /home/www/sh/seodd.sh
添加上述这行代码,代表每日的凌晨执行seodd.sh这个邮件发送shell脚本,就可以实现定时邮件发送功能,在需要达到这个效果还有几步操作。
售前推出crontab文件的编辑模式,敲击键盘Ecs建,然后输入 :wq ,按下回车代表保存成功,参考vi编辑即可。
7、重启crontab服务
service crond restart
crontab服务重启成功之后,以上的定时发送服务器日志邮件的功能就可以实现了,大家可以灵活使用shell脚本和crontab定时器就可以实现满足各种需求了。