假定你想配置一個 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> 替換成自己的 Gmail ID。注意該配置只是為了發(fā)送郵件而已(而非接收郵件)。
$ vi ~/.muttrc
set from = "gmail-id>@gmail.com"
set realname = "Dan Nanni"
set smtp_url = "smtp://gmail-id>@smtp.gmail.com:587/"
set smtp_pass = "gmail-password>"
一切就緒,使用 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 "your-gmail-ID>" password "gmail-password>"
using tlsv12
set mail-format {
from: your-gmail-ID>@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ā)送的郵件通知的例子。
總結(jié)
如你所見,類似 Gmail 這樣免費的 SMTP 服務(wù)器有著這么多不同的運用方式 。但再次重申,請牢記免費的 SMTP 服務(wù)器不適用于商業(yè)用途,僅僅適用于個人項目。無論你正在哪款應(yīng)用中使用 Gmail SMTP 服務(wù)器,歡迎自由分享你的用例。