Ubuntu下使用mail命令發(fā)送郵件
站在用戶的角度思考問題,與客戶深入溝通,找到無棣網(wǎng)站設(shè)計與無棣網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名與空間、網(wǎng)站空間、企業(yè)郵箱。業(yè)務(wù)覆蓋無棣地區(qū)。
在備份數(shù)據(jù)時,需要每天登錄服務(wù)器來查看備份是否成功。所以學(xué)習(xí)了下linux下如何通過shell來給自己郵箱發(fā)送郵件,這里以ubuntu為例,使用mail命令來進(jìn)行外部郵件的發(fā)送。mail命令的語法如下:
Usage: mail
[-iInv
]
[-s subject
]
[-c cc-addr
]
[-b bcc-addr
] to-addr ...
[-- sendmail-options ...
]
[-iInNv
]
-f
[name
]
[-iInNv
]
[-u user
]
使用mail命令發(fā)送郵件,有如下三種方式:
1、直接使用shell當(dāng)編輯器
-s
"test" davis
@gmail .com
hello,davis
welcome to you!
第一行是輸入的命令,-s表示郵件的主題,后面的davis@gmail.com則是郵件的接收人,輸入完這行命令后回車,會進(jìn)入郵件正文的編寫,我們可以輸入任何文字,比如上面的兩行。當(dāng)郵件正文輸入完成后,需要按CTRL+D結(jié)束輸入,此時會提示你輸入Cc地址,即郵件抄送地址,沒有直接回車就完成了郵件的發(fā)送。
2、使用管道進(jìn)行郵件發(fā)送
echo
"hello,davis.\n This is a test mail"
-s
"test" davis
@gmail .com
使用管道直接敲入這行命令即可完成郵件的發(fā)送,其中echo后的是郵件正文。
3、使用文件進(jìn)行郵件發(fā)送
-s
"Hello davis" davis
@gmail .com
mail.txt
使用上面的命令后,我們就可以把mail.txt文件的內(nèi)容作為郵件的內(nèi)容發(fā)送給davis@gmail.com了。
還有些其他的參數(shù)就不再介紹。
Linux服務(wù)器發(fā)送郵件一般都是基于sendmail進(jìn)行的,sendmail服務(wù)器提供對外的郵件發(fā)送功能。
1.安裝sendmail服務(wù)器安裝方法:
#sudo apt-get install sendmail
2.然后通過ps查看是否有sendmail進(jìn)程,如果存在,則安裝成功:
#ps -ef|grep sendmailroot 1282 1 0 13:39 ? 00:00:00 sendmail: MTA: accepting connections
3.成功安裝sendmail后,就可以向郵件賬戶發(fā)送郵件了,編輯如下文件a.sh,通過chmod 更改權(quán)限后執(zhí)行就可以。
筆者做過做過使用python發(fā)送郵件- Python使用yagmail庫發(fā)送郵件 ,那么在不同平臺都可以完成一些監(jiān)控報警功能。但是在linux平臺下,如果腳本是shell實現(xiàn)的,可以調(diào)用python腳本,也可以直接使用shell來發(fā)送。
1、按照mailx軟件包, 安裝后在/usr/bin/mail
? ? sudo yum install mailx -y
2、修改配置文件/etc/mail.rc
? ? 直接修改配置文件vim /etc/mail.rc, 在最后追加下面的配置,筆者使用的是163郵箱。需要注意的是,需要進(jìn)入郵箱開啟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)容進(jìn)行郵件發(fā)送:mail -s? "郵件主題"? 收件地址? ? mail.txt? 。
也可以在命令行輸入郵箱內(nèi)容:mail -s? "郵件主題"? 收件地址? ,輸入完這行命令后回車,會進(jìn)入郵件正文的編寫,可以輸入任何文字。當(dāng)郵件正文輸入完成后,需要按CTRL+D結(jié)束輸入后發(fā)送。
如果發(fā)送失敗,咋命令行會提示錯誤: message not sent,并會在用戶目錄下的dead.letter里面顯示具體信息。
假定你想配置一個 Linux 應(yīng)用,用于從你的服務(wù)器或桌面客戶端發(fā)送郵件信息。郵件信息可能是郵件簡報、狀態(tài)更新(如 Cachet)、監(jiān)控警報(如 Monit)、磁盤時間(如 RAID mdadm)等等。當(dāng)你要建立自己的 郵件發(fā)送服務(wù)器 傳遞信息時 ,你可以替代使用一個免費的公共 SMTP 服務(wù)器,從而避免遭受維護(hù)之苦。
谷歌的 Gmail 服務(wù)就是最可靠的 免費 SMTP 服務(wù)器 之一。想要從應(yīng)用中發(fā)送郵件通知,你僅需在應(yīng)用中添加 Gmail 的 SMTP 服務(wù)器地址和你的身份憑證即可。
使用 Gmail 的 SMTP
服務(wù)器會遇到一些限制,這些限制主要用于阻止那些經(jīng)常濫用服務(wù)器來發(fā)送垃圾郵件和使用郵件營銷的家伙。舉個例子,你一次只能給至多 100
個地址發(fā)送信息,并且一天不能超過 500
個收件人。同樣,如果你不想被標(biāo)為垃圾郵件發(fā)送者,你就不能發(fā)送過多的不可投遞的郵件。當(dāng)你達(dá)到任何一個限制,你的 Gmail
賬戶將被暫時的鎖定一天。簡而言之,Gmail 的 SMTP 服務(wù)器對于你個人的使用是非常棒的,但不適合商業(yè)的批量郵件。
說了這么多,是時候向你們展示 如何在 Linux 環(huán)境下使用 Gmail 的 SMTP 服務(wù)器 了。
Google Gmail SMTP 服務(wù)器設(shè)置
如果你想要通過你的應(yīng)用使用 Gmail 的 SMTP 服務(wù)器發(fā)送郵件,請牢記接下來的詳細(xì)說明。
郵件發(fā)送服務(wù)器 (SMTP 服務(wù)器): smtp.gmail.com
使用認(rèn)證: 是
使用安全連接: 是
用戶名: 你的 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ù)。
當(dāng)服務(wù)器重啟時發(fā)送郵件通知
如果你在 虛擬專用服務(wù)器(VPS)
上跑了些重要的網(wǎng)站,建議監(jiān)控 VPS 的重啟行為。作為一個更為實用的例子,讓我們研究如何在你的 VPS
上為每一次重啟事件建立郵件通知。這里假設(shè)你的 VPS 上使用的是 systemd,并向你展示如何為自動郵件通知創(chuàng)建一個自定義的 systemd
啟動服務(wù)。
首先創(chuàng)建下面的腳本 reboot_notify.sh,用于負(fù)責(zé)郵件通知。
$ 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)存、進(jìn)程、文件系統(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 負(fù)載超載而由 Monit 發(fā)送的郵件通知的例子。
mail -s "Hello from linuxde.net by shell" admin@linuxde.net
hello,this is the content of mail.
welcome to
第一行是輸入的命令,-s表示郵件的主題,后面的admin@linuxde.net則是郵件的接收人,輸入完這行命令后回車,會進(jìn)入郵件正文的編寫,我們可以輸入任何文字,比如上面的兩行。當(dāng)郵件正文輸入完成后,需要按CTRL+D結(jié)束輸入,此時會提示你輸入Cc地址,即郵件抄送地址,沒有直接回車就完成了郵件的發(fā)送。