linux系統定時發送郵件

Linux Centos7系統下利用自帶的mail發送郵件服務linux

 

簡介shell

本章分爲五部分。數據庫

第一部分是基於虛擬機下的CentOS 7環境定時發送郵件;segmentfault

第二部分是基於在阿里雲購買的CentOS 7服務器環境定時發送郵件;瀏覽器

第三部分是羣發郵件的測試。安全

第四部分是注意事項bash

第五部分是配置mail定時發送郵件碰到的問題以及解決方案服務器

 

1、虛擬機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

 

2、在阿里雲服務器的環境下

阿里雲封閉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/

 

3、羣發郵件測試

1、準備兩個文件mail.shtask.txt

 

二、shell腳本mail.sh的內容

 

三、Task.txt存儲的是羣發人的郵箱

 

四、編輯crontab定時任務內容

[root@localhost home]# crontab -e

 

4、注意事項

Windows編輯的文件上傳到linux系統中,會出現編碼等問題,能夠在notepad++中設定以下:

編輯-文檔格式轉換-轉換爲UNIX格式

 

5、配置mail定時發送郵件碰到的問題以及解決方案

一、在編輯/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://便可

二、在進行添加證書到數據庫是報錯如下錯誤

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

三、基於第二點詳解

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

 

也能夠直接在瀏覽器上打開網頁版,保存證書爲PEMbase64格式)格式而後

上傳到服務器

將證書添加到受信任列表:

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

上述命令中

-A表示添加

-nnickname,能夠隨意取,例如126qq

-t表示受信任的標籤,可取值是t/c/p三種或者其組合;

-d表示證書所在目錄

-i指示證書文件的位置。

 

在配置文件中更改證書目錄:

指向證書文件目錄

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

網上許多教程的-t標籤都是"C,,",實踐中發現使用該標籤仍會報錯(gmail的證書

google本身簽發的,用C標籤沒問題,許多博主估計沒試就直接抄來)。經過查

certutil的用法,使用P標籤順利解決問題。

相關文章
相關標籤/搜索