目的:連接第三方smtp服務器去發送郵件,比如qq、新浪、網易等郵箱,只需要直接配置mail.rc文件即可實現。
本實驗使用網易126郵箱。
1.先去126郵箱開通smtp服務並獲得授權密碼記住,后面會用到。
2.查看smtp.126.com服務器開啟了那些端口,以前默認是25,現在網易停用了。
[root@danny ]# nmap smtp.126.com Starting Nmap 6.40 ( http://nmap.org ) at 2020-06-17 16:05 CST Nmap scan report for smtp.126.com (123.126.96.4) Host is up (0.014s latency). Other addresses for smtp.126.com (not scanned): 123.126.96.5 220.181.15.113 220.181.15.112 220.181.15.111 123.126.96.3 220.181.15.114 rDNS record for 123.126.96.4: mail-m964.mail.126.com Not shown: 998 filtered ports PORT STATE SERVICE 465/tcp open smtps 587/tcp open submission
或者使用nc命令掃描對應端口查看開啟狀態
[root@danny ]# nc -zv smtp.126.com 465 Ncat: Version 7.50 ( https://nmap.org/ncat ) Ncat: Connected to 123.126.96.5:465. Ncat: 0 bytes sent, 0 bytes received in 0.04 seconds.
可以看到開啟了465和587端口(本次實驗使用465),而下圖可看到465端口使用的是ssl協議,所以相對mail.rc配置就需要使用ssl協議。
3.配置mail.rc
vim /etc/mail.rc set from=xxx@126.com //發件方郵箱或昵稱,經過測試必須得和下面的發件郵箱一致,否則發不了郵件 set smtp=smtps://smtp.126.com:465 //注意使用的ssl協議連接 set smtp-auth-user=xxx@126.com //發件郵箱 set smtp-auth-password=xxxxxx //此處使用的就是前面生成的授權碼 set stmp-auth=login set ssl-verify=ignore set nss-config-dir=/root/.certs //此處證書需要手動生成,否則會報錯或者連接失敗
重啟服務
systemctl restart postfix.service
4.發送郵件測試
#第一種 echo "test" | mail -s 'test linux' xxx@qq.com #第二種 mailx -v -s " 主題 " xxx@qq.com < a.sh //-v可以動態顯示郵件發送狀態。可以把a.sh文件的內容作為郵件內容發送
關於上面證書創建
默認的證書是沒有的,如果不創建相應證書,郵件發送會報錯或者連接失敗。
//創建證書目錄 mkdir -p /root/.certs cd .certs/ //獲取郵件服務器證書 echo -n "" | openssl s_client -connect smtp.126.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > 126.crt //將證書添加到受信任列表 certutil -A -n 'smtp_126' -t "P,P,P" -d . -i ./126.crt //上述命令中-A表示添加,-n是nickname,可以隨意取,例如126或qq;-t表示受信任的標簽,可取值是t/c/p三種或者其組合;-d表示證書所在目錄,-i指示證書文件的位置。 //# 指向證書文件目錄 set nss-config-dir=/root/.certs
注:
網上許多教程的-t標簽都是"C,,",實踐中發現使用該標簽仍會報錯(gmail的證書是google自己簽發的,用C標簽沒問題,許多博主估計沒試就直接抄來)。通過查閱certutil的用法,使用P標簽順利解決問題。
配置完成后,再使用mail命令發送郵件,煩人的警告消失不見。
參考文章:http://www.51testing.com/html/53/n-3727153.html