日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux 发送外部邮件

發布時間:2024/4/15 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 off

2.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.com

2.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.

可以理解成是沒有證書文件,老外的做法是獲取生成證書文件。

  • 生成證書
mkdir ~/.certs && certutil -N -d ~/.certs
1 這個時候會發現,下面生成了幾個keycert文件
  • 獲取qq郵箱證書
echo -n | openssl s_client -connect smtp.exmail.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/exmail.crt certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/exmail.crt 這里的 GeoTrust SSL CA,是打開 https://exmail.qq.com,然后點開看, exmail.qq.com 上一級證書的名字,實際測試發現,其實根本也沒關系
  • 發送測試
#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 in certificate: Peer's certificate issuer is not recognized. Comparing DNS name: "mx3.qq.com" Comparing DNS name: "mx2.qq.com" Comparing DNS name: "mx1.qq.com" Comparing DNS name: "mxbiz1.qq.com" Comparing DNS name: "mxbiz2.qq.com" Comparing DNS name: "imap.qq.com" Comparing DNS name: "smtp.qq.com" Comparing DNS name: "pop.exmail.qq.com" Comparing DNS name: "imap.exmail.qq.com" Comparing DNS name: "smtp.exmail.qq.com" SSL parameters: cipher=RC4, keysize=128, secretkeysize=128, issuer=CN=GeoTrust SSL CA - G2,O=GeoTrust Inc.,C=US subject=CN=pop.qq.com,OU=R&D,O=Shenzhen Tencent Computer Systems Company Limited,L=Shenzhen,ST=Guangdong,C=CN 220 smtp.qq.com Esmtp QQ Mail Server >>> EHLO iZ23458bi3lZ 250-smtp.qq.com 250-PIPELINING 250-SIZE 73400320 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN 250-MAILCOMPRESS 250 8BITMIME >>> AUTH LOGIN 334 xxxxxxx >>> xxxxxxx 334 xxxxxxx >>> xxxxxxx== 235 Authentication successful >>> MAIL FROM:<51xpages@ymtest.cn> 250 Ok >>> RCPT TO:<51xpages@ymtest.cn> 250 Ok >>> DATA 354 End data with <CR><LF>.<CR><LF> >>> . 250 Ok: queued as >>> QUIT 221 Bye

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 发送外部邮件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。