linux 发送外部邮件
原始鏈接
http://www.51xpage.com/%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AE%A1%E7%90%86/2015/12/10/dao-ting-tu-shuo-linux-xi-lie-9-fa-song-wai-bu-you-jian
1、問題提出
希望通過腳本發送郵件,起因是zabbix里面有個地方需要發郵件。而它在Web上提供的方式比較簡單,smtp服務器和helo啥啥啥的,在現在安全連接的時代,顯然是不夠的,可配置的項很少。好在它提供了另外一種方式,即采用腳本發送的方式。
2、嘗試過程
根據以往Domino的經驗,通常是一來就把sendmail干掉了,發送郵件不能隨便一個服務器,馬上就被當垃圾郵件被拒信了,而且就算弄個MX記錄也麻煩,整個黑名單啥的。所以比較靠譜的方式,還是利用現有的服務器來發,注冊一個免費郵箱。
2.1、停止 sendmail 和postfix
service sendmail stop chkconfig sendmail off service postfix stop chkconfig postfix off2.2、使用mail/mailx發送郵件
通過
rpm -qa|grep mailx命令可以看到系統是否安裝了mail。不過發現mail和mailx在centos 7下面是一樣的
見識了一下 echo命令,這大概就是Linux系列的強大之處吧,用echo就發郵件了。
echo -e "Email content" | mailx -v -s "Email subject" -S smtp-auth=login -S smtp=smtp.163.com -S from="username@gmail.com(John Doe)" -S smtp-auth-user=test@163.com -S smtp-auth-password=passw0rd recipient@some.com2.3、使用mail.rc
用上面的命令行確實可行,但是配置有點亂,所以還有個解決方案是把配置放到 mail.rc里面去
# vim /etc/mail.rc set from=test@163.com set smtp=smtp.163.com set smtp-auth-user=test set smtp-auth-password=password set smtp-auth=login發送郵件的時候,使用
echo "內容" | mail -s " 標題" sendto@163.com如果碰到需要多個smtp賬號就無法處理了,其實它還有另外一種做法。
accout 163 { set from=test@163.com set smtp=smtp.163.com set smtp-auth-user=test set smtp-auth-password=password set smtp-auth=login }相應的,發送命令也需要做調整,如下
echo "內容" | mail -A 163 -s " 標題" sendto@163.com即,這里多了一個 -A 參數
2.4、發送smtps郵件
用上面的方法無法實現發送帶安全驗證的郵件。找到參考資料的里面的老外的做法。
account exmail {set ssl-verify=ignore set nss-config-dir=~/.cert set from=jenkins@yaomaitong.cn set smtp=smtps://smtp.exmail.qq.com:465 set smtp-auth-user=username@qymail.com set smtp-auth-password=s0m3p@zzW0rD set smtp-auth=login }類似這樣的,但是會報錯,
#echo "內容" | mail -A exmail -v -s " 標題" sendto@163.com Resolving host smtp.exmail.qq.com . . . done. Connecting to 163.177.72.143:465 . . . connected. Error initializing NSS: Unknown error -8015. "/root/dead.letter" 11/300 . . . message not sent.可以理解成是沒有證書文件,老外的做法是獲取生成證書文件。
- 生成證書
| 1 | 這個時候會發現,下面生成了幾個key和cert文件 |
- 獲取qq郵箱證書
- 發送測試
3、最終方案
其實應該來講,用上面的方法就可以了。但是當時沒有配置成功,所以采用了另外的辦法。 找到一個裝了 firefox的電腦,把~/.mozilla/firefox/xxxxxxxx.default/ 的 cert.db 與 key.db 拷貝到 ~/.certs文件夾下。效果居然是一樣的。
4、幾個問題
因為是給zabbix用的,是一個單獨的nologin賬戶,但是測試的時候,是在root用戶下做的,通了,但是zabbix無法發郵件,后來發現問題出在 certs路徑上,它指向的是當前用戶的 .certs文件夾。 然后拷貝過來,發現另外一個問題,權限不對,zabbix沒有 r權限,都是root用戶的
Error in certificate: Peer’s certificate issuer is not recognized.
不加v參數會有這個問題
Error in certificate: Peer’s certificate issuer is not recognized.
5、參考資料
- 采用sendmail,基本不考慮?http://yyzll.blog.51cto.com/4283444/1541890
- 外國人的?https://coderwall.com/p/ez1x2w/send-mail-like-a-boss
- 發非smtps喲就http://coolnull.com/2614.html
- http://blog.sina.com.cn/s/blog_56ae1d5801019hlr.html
參數說明
-r 指定發件人 -c 指定抄送人 -b 指定密送人 -s 郵件主題 -V 顯示版本 -v 發送過程 多個收件人之間用逗號分隔轉載于:https://www.cnblogs.com/yp2017/p/9118521.html
總結
以上是生活随笔為你收集整理的linux 发送外部邮件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU-4417 Super Mario
- 下一篇: Linux platform驱动模型