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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM