筆者做過做過使用python發(fā)送郵件- Python使用yagmail庫發(fā)送郵件 ,那么在不同平臺都可以完成一些監(jiān)控報警功能。但是在linux平臺下,如果腳本是shell實現(xiàn)的,可以調(diào)用python腳本,也可以直接使用shell來發(fā)送。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了昌邑免費建站歡迎大家使用!
1、按照mailx軟件包, 安裝后在/usr/bin/mail
? ? sudo yum install mailx -y
2、修改配置文件/etc/mail.rc
? ? 直接修改配置文件vim /etc/mail.rc, 在最后追加下面的配置,筆者使用的是163郵箱。需要注意的是,需要進入郵箱開啟SMTP服務(wù),然后得到一個授權(quán)碼,用于登錄第三方郵件客戶端的專用密碼。smtp-auth-password即為授權(quán)碼,而不是郵箱地方密碼。
3、發(fā)送郵箱測試
? ? ? 命令行輸入: echo "測試郵件" | mail -s "郵件主題" -a ./myshells/clear_buffcache.sh ***@qq.com? 。-s添加郵箱主題,并添加附件后將郵箱內(nèi)容一起發(fā)送給***@qq.com? 。郵箱里面立馬就可以收到了。
也可以使用文件內(nèi)容進行郵件發(fā)送:mail -s? "郵件主題"? 收件地址? ? mail.txt? 。
也可以在命令行輸入郵箱內(nèi)容:mail -s? "郵件主題"? 收件地址? ,輸入完這行命令后回車,會進入郵件正文的編寫,可以輸入任何文字。當郵件正文輸入完成后,需要按CTRL+D結(jié)束輸入后發(fā)送。
如果發(fā)送失敗,咋命令行會提示錯誤: message not sent,并會在用戶目錄下的dead.letter里面顯示具體信息。
假定你想配置一個 Linux 應(yīng)用,用于從你的服務(wù)器或桌面客戶端發(fā)送郵件信息。郵件信息可能是郵件簡報、狀態(tài)更新(如 Cachet)、監(jiān)控警報(如 Monit)、磁盤時間(如 RAID mdadm)等等。當你要建立自己的 郵件發(fā)送服務(wù)器 傳遞信息時 ,你可以替代使用一個免費的公共 SMTP 服務(wù)器,從而避免遭受維護之苦。
谷歌的 Gmail 服務(wù)就是最可靠的 免費 SMTP 服務(wù)器 之一。想要從應(yīng)用中發(fā)送郵件通知,你僅需在應(yīng)用中添加 Gmail 的 SMTP 服務(wù)器地址和你的身份憑證即可。
使用 Gmail 的 SMTP
服務(wù)器會遇到一些限制,這些限制主要用于阻止那些經(jīng)常濫用服務(wù)器來發(fā)送垃圾郵件和使用郵件營銷的家伙。舉個例子,你一次只能給至多 100
個地址發(fā)送信息,并且一天不能超過 500
個收件人。同樣,如果你不想被標為垃圾郵件發(fā)送者,你就不能發(fā)送過多的不可投遞的郵件。當你達到任何一個限制,你的 Gmail
賬戶將被暫時的鎖定一天。簡而言之,Gmail 的 SMTP 服務(wù)器對于你個人的使用是非常棒的,但不適合商業(yè)的批量郵件。
說了這么多,是時候向你們展示 如何在 Linux 環(huán)境下使用 Gmail 的 SMTP 服務(wù)器 了。
Google Gmail SMTP 服務(wù)器設(shè)置
如果你想要通過你的應(yīng)用使用 Gmail 的 SMTP 服務(wù)器發(fā)送郵件,請牢記接下來的詳細說明。
郵件發(fā)送服務(wù)器 (SMTP 服務(wù)器): smtp.gmail.com
使用認證: 是
使用安全連接: 是
用戶名: 你的 Gmail 賬戶 ID (比如 "alice" ,如果你的郵箱為 alice@gmail.com)
密碼: 你的 Gmail 密碼
端口: 587
確切的配置根據(jù)應(yīng)用會有所不同。在本教程的剩余部分,我將向你展示一些在 Linux 上使用 Gmail SMTP 服務(wù)器的應(yīng)用示例。
從命令行發(fā)送郵件
作為第一個例子,讓我們嘗試最基本的郵件功能:使用 Gmail SMTP 服務(wù)器從命令行發(fā)送一封郵件。為此,我將使用一個稱為 mutt 的命令行郵件客戶端。
先安裝 mutt:
對于 Debian-based 系統(tǒng):
$ sudo apt-get install mutt
對于 Red Hat based 系統(tǒng):
$ sudo yum install mutt
創(chuàng)建一個 mutt 配置文件(~/.muttrc),并和下面一樣,在文件中指定 Gmail SMTP 服務(wù)器信息。將 替換成自己的 Gmail ID。注意該配置只是為了發(fā)送郵件而已(而非接收郵件)。
$ vi ~/.muttrc
set from = "@gmail.com"set realname = "Dan Nanni"set smtp_url = "smtp://@smtp.gmail.com:587/"set smtp_pass = ""
一切就緒,使用 mutt 發(fā)送一封郵件:
$ echo "This is an email body." | mutt -s "This is an email subject" alice@yahoo.com
想在一封郵件中添加附件,使用 "-a" 選項
$ echo "This is an email body." | mutt -s "This is an email subject" alice@yahoo.com -a ~/test_attachment.jpg
使用 Gmail SMTP 服務(wù)器意味著郵件將顯示是從你 Gmail 賬戶發(fā)出的。換句話說,收件人將視你的 Gmail 地址為發(fā)件人地址。如果你想要使用自己的域名作為郵件發(fā)送方,你需要使用 Gmail SMTP 轉(zhuǎn)發(fā)服務(wù)。
當服務(wù)器重啟時發(fā)送郵件通知
如果你在 虛擬專用服務(wù)器(VPS)
上跑了些重要的網(wǎng)站,建議監(jiān)控 VPS 的重啟行為。作為一個更為實用的例子,讓我們研究如何在你的 VPS
上為每一次重啟事件建立郵件通知。這里假設(shè)你的 VPS 上使用的是 systemd,并向你展示如何為自動郵件通知創(chuàng)建一個自定義的 systemd
啟動服務(wù)。
首先創(chuàng)建下面的腳本 reboot_notify.sh,用于負責郵件通知。
$ sudo vi /usr/local/bin/reboot_notify.sh
#!/bin/sh
echo "`hostname` was rebooted on `date`" | mutt -F /etc/muttrc -s "Notification on `hostname`" alice@yahoo.com
$ sudo chmod +x /usr/local/bin/reboot_notify.sh
在這個腳本中,我使用 "-F" 選項,用于指定系統(tǒng)級的 mutt 配置文件位置。因此不要忘了創(chuàng)建 /etc/muttrc 文件,并如前面描述的那樣填入 Gmail SMTP 信息。
現(xiàn)在讓我們創(chuàng)建如下一個自定義的 systemd 服務(wù)。
$ sudo mkdir -p /usr/local/lib/systemd/system$ sudo vi /usr/local/lib/systemd/system/reboot-task.service
[Unit]
Description=Send a notification email when the server gets rebooted
DefaultDependencies=no
Before=reboot.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/reboot_notify.sh
[Install]
WantedBy=reboot.target
在創(chuàng)建服務(wù)后,添加并啟動該服務(wù)。
$ sudo systemctl enable reboot-task$ sudo systemctl start reboot-task
從現(xiàn)在起,在每次 VPS 重啟時,你將會收到一封通知郵件。
通過服務(wù)器使用監(jiān)控發(fā)送郵件通知
作為最后一個例子,讓我展示一個現(xiàn)實生活中的應(yīng)用程序,Monit,這是一款極其有用的服務(wù)器監(jiān)控應(yīng)用程序。它帶有全面的 VPS 監(jiān)控能力(比如 CPU、內(nèi)存、進程、文件系統(tǒng))和郵件通知功能。
如果你想要接收 VPS 上由 Monit 產(chǎn)生的任何事件的郵件通知,你可以在 Monit 配置文件中添加以下 SMTP 信息。
set mailserver smtp.gmail.com port 587
username "" password ""
using tlsv12
set mail-format {
from: @gmail.com
subject: $SERVICE $EVENT at $DATE on $HOST
message: Monit $ACTION $SERVICE $EVENT at $DATE on $HOST : $DESCRIPTION.
Yours sincerely,
Monit
}
# the person who will receive notification emails
set alert alice@yahoo.com
這是一個因為 CPU 負載超載而由 Monit 發(fā)送的郵件通知的例子。
1、首先你得開啟25端口,郵件服務(wù)器可以用sendmail或postfix,因為發(fā)件人是Received: from localhost.localdomain有些郵箱可能會拒絕或當作垃圾郵件
2、發(fā)送內(nèi)容
cat a.txt|mail youremail
3、發(fā)送附件
yum -y install sharutils
uuencode a.txt a.txt |mail -s ‘subject’ youremail
mail -s "Hello from linuxde.net by shell" admin@linuxde.net
hello,this is the content of mail.
welcome to
第一行是輸入的命令,-s表示郵件的主題,后面的admin@linuxde.net則是郵件的接收人,輸入完這行命令后回車,會進入郵件正文的編寫,我們可以輸入任何文字,比如上面的兩行。當郵件正文輸入完成后,需要按CTRL+D結(jié)束輸入,此時會提示你輸入Cc地址,即郵件抄送地址,沒有直接回車就完成了郵件的發(fā)送。
有時候在服務(wù)器遞交了一個或多個任務(wù),然后把電腦關(guān)了,但是又想任務(wù)運行完后盡快知道。
這就可以用到mail命令給自己發(fā)郵件,首先在遞交任務(wù)時指定特定的任命名標簽 flag ,然后使用 qstat 命令去監(jiān)測這個flag是否存在。如果存在則繼續(xù)監(jiān)測,如果不存在,則說明已經(jīng)完成,給自己發(fā)個郵件提醒。
在 .bashrc 里面定義函數(shù)實現(xiàn)這個功能:
然后打開一個終端就可以直接用了。
操作系統(tǒng)(無論linux還是windows)有一種“管道”的概念,可以把一個程序的標準輸入/輸出改到其他的地方。
你說的那些gui外殼,就是為命令行程序創(chuàng)建了一個管道,標準輸入和標準輸出被改到了gui外殼程序的內(nèi)部。所以就不會再彈出命令行窗口了。
gui外殼會根據(jù)你在窗口上的操作,通過管道,向命令行程序發(fā)送指令,就像你手動在命令行窗口上敲命令一樣。
命令行程序的標準輸出也會通過管道傳送到gui外殼的內(nèi)部,加以處理后在窗口上顯示個給你.