配置mail使用SMTP發送郵件

来源:本站原创 IT必备工具 超过10 views围观 0条评论

# QQ郵箱支持STARTTLS,使用587端口 account qq { set smtp=smtp://smtp.qq.com:587 set smtp-auth=login set smtp-auth-user=user@qq.com set smtp-auth-password=password set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb set from="user@qq.com(nickname)" set smtp-use-starttls=yes }

配置文檔中定義了兩個賬户,發送郵件時可用-A參數指定發信賬户:

echo 'mail test for 126' | mail -A 126 -s 'mail test' user@xxx.com
echo 'mail test for qq' | mail -A qq -s 'mail test' user@xxx.com

除了配置文檔,也可以在命令行中用-S參數進行設置。例如:

echo 'mail test for command line option' | mail -s 'mail test' -S smtp=smtp://smtp.qq.com:587 -S smtp-auth=login -S smtp-auth-user=user@qq.com -S smtp-auth-password=password -S ssl-verify=ignore -S nss-config-dir=/etc/pki/nssdb -S from="user@qq.com(nickname)" -S smtp-use-starttls=yes user@xxx.com

這種方法比較繁瑣,就是將配置文檔的每一行都作為選項寫在命令中。在進程中調用 mail 命令發送郵件時可以採取這種方法。

解決警告

雖然郵件能順利發送,但每次運行都會出現一行警告:“Error in certificate: Peer’s certificate issuer is not recognized.”。這是由於使用加密通信,但客户端不能確認證書是否真實。如果我們將配置中的 set ssl-verify=ignore 改成 set ssl-verify=strict ,連接將直接中斷而不會繼續發郵件。

要解決這個警告,需要將郵件服務器的證書加入到信任列表。操作步驟如下:

  1. 獲取郵件服務器證書:
# 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格式)格式然後上傳到服務器
  1. 將證書添加到受信任列表:
certutil -A -n 'xxxx' -t "P,P,P" -d . -i ./xxx.crt

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

  1. 在配置文檔中更改證書目錄:
# 指向證書文檔目錄
set nss-config-dir=/path/to/cert-dir

網上許多教程的-t標籤都是 "C,," ,實踐中發現使用該標籤仍會報錯(gmail的證書是google自己簽發的,用C標籤沒問題,許多博主估計沒試就直接抄來)。通過查閲 certutil 的用法,使用P標籤順利解決問題。

配置完成後,再使用 mail 命令發送郵件,煩人的警告消失不見。

文章出自:CCIE那点事 http://www.jdccie.com/ 版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。 禁止全文转载。
本文链接:http://www.jdccie.com/?p=3983转载请注明转自CCIE那点事
如果喜欢:点此订阅本站
  • 相关文章
  • 为您推荐
  • 各种观点

暂时还木有人评论,坐等沙发!
发表评论

快捷键:Ctrl+Enter