Linux使用mail發送電子郵件


一、說明

    mail和mailx就像我們windows上的foxmail,是個客戶端工具,在Linux運維環境中可能會用到一些報警之類的功能,可通過系統mail命令直接發送電子郵件到指定的郵箱用來實現告警,本文就mail客戶端配置和常見使用格式做下學習。

二、不加密發送郵件

1、安裝mail,使用yum install mailx即可直接安裝。

2、編輯mail配置文件,對發件人身份、服務器、端口等進行基本配置,/etc/mail.rc

 

###vim /etc/mail.rc
## smtp服務器發信的用戶名和昵稱
set from
=test@tompig.cn(nickname)
## smtp服務器的地址
set smtp=smtp://smtp.mxhichina.com

## 郵件認證的方式 set smtp-auth=login

## smtp服務器認證的用戶名 set smtp-auth-user=test@tompig.cn
## smtp服務器認證的用戶密碼(授權碼) set smtp
-auth-password=password

 

至此,配置文件配置完成,可使用下面的命令進行發信測試

echo "mail warning test,this is a test email" | mail -s "mail report" 150xxxxxxxx@139.com

注意:1)smtp發信需要郵件系統管理員配置該認證賬戶的發信權限,允許使用smtp協議發信,認證密碼根據實際情況填寫,有的雲郵箱可能是個動態授權碼。

   2)有些雲郵箱本身自帶反垃圾功能,如果由於郵件內容寫的比較簡單或其他原因導致被識別為垃圾郵件,可能會出現報錯“Unexpected EOF on SMTP connection”,也可能本地沒有報錯,但是登陸到郵箱網頁會收到退信,此退信並不是最終的收件人郵箱服務器產生的退信,而是發信服務器在發信之前就判斷成了垃圾郵件,產生退信。可以適當修改郵件內容、主題等信息,避免因為內容被識別成垃圾郵件。加密傳輸也可能出現"Unexpected EOF on SMTP connection",基本上是由於端口只支持SMTPS導致,將協議改成smtps://,參考下文配置。

 

 

三、加密發送郵件

上述情況在使用smtp發信時用的是25端口,而有些郵件服務器端是不允許開啟25端口的,可能會使用smtps(465)、starttls(587)等加密端口發信,這里以465端口舉例。

修改配置文件(/etc/mail.rc)如下:

 

## smtp服務器發信的用戶名
set from=test@tompig.cn
## smtp服務器的地址,注意"smtps"協議名和后面的端口號
set smtp=smtps://smtp.mxhichina.com:465
## 郵件認證的方式 set smtp-auth=login

## smtp服務器認證的用戶名 set smtp-auth-user=test@tompig.cn
## smtp服務器認證的用戶密碼(授權碼) set smtp
-auth-password=password

## 忽略驗證錯誤 set ssl-verify=ignore
##指定證書文件存放目錄,自定義 set nss
-config-dir=/root/.cert/

 

這里在配置文件中多加入驗證配置和證書文件存放目錄配置2行,需要手動導入認證郵件服務器的證書,添加信任。

執行步驟如下:

##創建自定義目錄
mkdir /root/.certs
##進入證書目錄 cd
/root/.certs ##獲取郵件服務器證書秘鑰(465端口) echo -n "" | openssl s_client -connect smtp.mxhichina.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > aliyun_smtps.crt
##附:獲取郵件服務器證書秘鑰(587端口) #
echo -n | openssl s_client -starttls smtp -connect smtp.mxhichina.com:587 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > aliyun_starttls.crt

##將證書添加到受信任列表 certutil
-A -n 'aliyun' -t "P,P,P" -d . -i ./aliyun_smtps.crt

上述certutil命令中-A表示添加,-n是nickname(昵稱),可以隨意取,例如126或qq;-t表示受信任的標簽,可取值是t/c/p三種或者其組合;-d表示證書所在目錄,-i指示證書文件的位置。

至此,配置完成,可使用mail命令直接發信,這里簡單說明一下:

1)如果是465端口,需要加上smtps://協議;如果是587端口,不需要加smtps://或者寫smtp://;
2)如果使用587端口通訊,應當顯示設置smtp-use-starttls;
3)郵件的來源應當與郵箱相同,或者將發信人姓名寫在郵箱后的括號中。例如:set from=user@xxxx.com或set from=user@xxx.com(nickname);如果郵箱與認證的不一致,將出現“smtp-server: 553 Mail from must equal authorized user”的錯誤;
4)有些郵件服務器的587端口不是使用STARTTLS而是SMTPS,此時仍需加上smtps://協議,例如126郵箱

 

四、mail常用命令簡介

1、在標准輸入中輸入郵件內容:

~]# mail -s 'mail test' xxx@139.com

this is a test email

輸入完成后成按Ctrl+D結束並發送郵件。連按兩次Ctrl+C鍵則中斷工作,不送此信件。

2、通過管道傳送郵件正文

~]# echo 'test mail' | mail -s 'mail test' xxx@139.com

其中echo值為郵件內容,-s參數指定郵件主題,最后面跟收件人郵箱地址

3、使用輸入重定向,從文件中獲取郵件內容

mail -s 'mail test' xxx@139.com < file.txt

4、如果需要發送給多個收件人,收件人之間用逗號隔開即可。如下:

mail -s 'mail test' xxx@139.com,xxx@126.com < file.txt

5、其他參數補充

 

-b<地址>:指定密件副本的收信人地址;
-c<地址>:指定副本的收信人地址;
-f<郵件文件>:讀取指定郵件文件中的郵件;
-i:不顯示終端發出的信息;
-I:使用互動模式;
-n:程序使用時,不使用mail.rc文件中的設置;
-N:閱讀郵件時,不顯示郵件的標題;
-s<郵件主題>:指定郵件的主題;
-u<用戶帳號>:讀取指定用戶的郵件;
-v:執行時,顯示詳細的信息。

 

 

 

參考資料:

https://tlanyan.me/config-mail-use-smtp/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM