shell 腳本發送郵件

有時候會使用腳本完成一系列的自動化工作,工作完成后還需要郵件通知相關人員,此時可以使用第三方的工具:SendEmail,最新版本sendEmail-v1.56.tar.gz
下載地址:http://caspian.dotconf.net/menu/Software/SendEmail/

sendEmil的使用范例:

#!/bin/bash
email_reciver="oneway@163.com lin@126.com"
#發送者郵箱
email_sender=373850874@qq.com
#郵箱用戶名
email_username=373850874
#郵箱密碼
#使用qq郵箱進行發送需要注意:首先需要開啟:POP3/SMTP服務,其次發送郵件的密碼需要使用在開啟POP3/SMTP服務時候騰訊提供的第三方客戶端登陸碼。
email_password=mialbjhzsmuobigf

file1_path="附件一路徑"
file2_path="附件二路徑"

#smtp服務器地址
email_smtphost=smtp.qq.com

email_title="iOS客戶端更新"
email_content="謝謝!"

./sendEmail -f ${email_sender} -t ${email_reciver} -s ${email_smtphost} -u ${email_title} -xu ${email_username} -xp ${email_password} -m ${email_content} -a ${file1_path} ${file2_path} -o message-charset=utf-8

問題 1

要使用腳本發送郵件,必須設置發送郵箱開啟IMAP/SMTP服務。否則將會報錯。
IMAP,即Internet Message Access Protocol(互聯網郵件訪問協議),您可以通過這種協議從郵件服務器上獲取郵件的信息、下載郵件等。IMAP與POP類似,都是一種郵件獲取協議。

IMAP和POP有什么區別?
POP允許電子郵件客戶端下載服務器上的郵件,但是您在電子郵件客戶端的操作(如:移動郵件、標記已讀等),這是不會反饋到服務器上的,比如:您通過電子郵件客戶端收取了QQ郵箱中的3封郵件并移動到了其他文件夾,這些移動動作是不會反饋到服務器上的,也就是說,QQ郵箱服務器上的這些郵件是沒有同時被移動的 。但是IMAP就不同了,電子郵件客戶端的操作都會反饋到服務器上,您對郵件進行的操作(如:移動郵件、標記已讀等),服務器上的郵件也會做相應的動作。也就是說,IMAP是“雙向”的。
同時,IMAP可以只下載郵件的主題,只有當您真正需要的時候,才會下載郵件的所有內容。

問題 2

我使用的系統是Mac OSX EI Capitan, 運行命令時報錯如下:

MaxOS: invalid SSL_version specified at /System/Library/Perl/Extras
/5.18/IO/Socket/SSL.pm line 368. 

解決方案:
打開文件: /usr/share/perl5/IO/Socket/SSL.pm
找到: m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1(?:_?[12])?))$}i
替換為:m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i

可是接下來的問題又出現了,當你修改完成后卻無法保存,被告知權限不夠,可是你明明使用的是sudo,超級管理員權限。

這是由于 OSX EI Capitan之后蘋果采用了“Rootless”技術來保護系統內核,用戶將沒有權限操作系統文件。但是不要緊
蘋果并沒有把路封死。
執行以下命令:

% dsenableroot
username = wangwei
user password:
root password:
verify root password:

dsenableroot:: ***Successfully enabled root user.

命令執行后可以使sudo 獲取正真的Root用戶權限。sudo root用戶的密碼就是你剛剛設置的密碼。

如果你希望自己的賬戶擁有root權限,那么你也可以通過添加 -U 參數來達到這一目的:

dsenableroot -u wangwei
#其中wangwei為你的用戶名

此時你就可以更改/usr/share/perl5/IO/Socket/SSL.pm了。

關于root權限問題,蘋果既然使用了Rootless技術來保護內核雖然給我們造成了一些麻煩,但是一定是有他的道理的,比如更加安全,防止了誤操作等。
所以我們獲取到最高權限后,最好再取消Root權限

取消用戶的Root權限
取消用戶Root權限只需要在命令后加參數:-d (disable)

% dsenableroot -d
username = wangwei (或者是root)
user password:

dsenableroot:: ***Successfully disabled root user.

取消特定用戶的Root權限:

dsenableroot -d -u wangwei

關閉“Rootless”

sudo nvram boot-args="rootless=0"; sudo reboot

文章參考

1, http://osxdaily.com/2015/02/19/enable-disable-root-command-line-mac/
2, https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/dsenableroot.8.html

3, https://github.com/hy0kl/tech-note/blob/master/note/linux.md#sendemail-使用-163-smtp-代理發郵件報錯

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1、第八章 Samba服務器2、第八章 NFS服務器3、第十章 Linux下DNS服務器配站點,域名解析概念命令:...
    哈熝少主閱讀 3,775評論 0 10
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,991評論 19 139
  • 概念解釋 SPF:Sender Policy Framework,直譯過來就是發件人保證框架.出現的主要原因是SM...
    YusenMeng閱讀 79,610評論 8 58
  • 今天搞個exchage郵件服務器發送郵件的問題, 由于對整個機制不熟悉,費了很大功夫才弄出來,主要是端口用錯了,這...
    點點漁火閱讀 639評論 0 1
  • vsftpd.conf 部分:文件格式(5)索引 返回主要內容 名稱 vsftpd.conf - vsftpd的配...
    張龍象閱讀 2,362評論 0 1