如何在 Linux 上使用 Gmail SMTP 伺服器傳送郵件通知

Dan Nanni發表於2016-03-07

假定你想配置一個 Linux 應用,用於從你的伺服器或桌面客戶端傳送郵件資訊。郵件資訊可能是郵件簡報、狀態更新(如 Cachet)、監控警報(如 Monit)、磁碟時間(如 RAID mdadm)等等。當你要建立自己的 郵件傳送伺服器 傳遞資訊時 ,你可以替代使用一個免費的公共 SMTP 伺服器,從而避免遭受維護之苦。

如何在 Linux 上使用 Gmail SMTP 伺服器傳送郵件通知

谷歌的 Gmail 服務就是最可靠的 免費 SMTP 伺服器 之一。想要從應用中傳送郵件通知,你僅需在應用中新增 Gmail 的 SMTP 伺服器地址和你的身份憑證即可。

使用 Gmail 的 SMTP 伺服器會遇到一些限制,這些限制主要用於阻止那些經常濫用伺服器來傳送垃圾郵件和使用郵件營銷的傢伙。舉個例子,你一次只能給至多 100 個地址傳送資訊,並且一天不能超過 500 個收件人。同樣,如果你不想被標為垃圾郵件傳送者,你就不能傳送過多的不可投遞的郵件。當你達到任何一個限制,你的 Gmail 賬戶將被暫時的鎖定一天。簡而言之,Gmail 的 SMTP 伺服器對於你個人的使用是非常棒的,但不適合商業的批量郵件。

說了這麼多,是時候向你們展示 如何在 Linux 環境下使用 Gmail 的 SMTP 伺服器 了。

Google Gmail SMTP 伺服器設定

如果你想要通過你的應用使用 Gmail 的 SMTP 伺服器傳送郵件,請牢記接下來的詳細說明。

  • 郵件傳送伺服器 (SMTP 伺服器): smtp.gmail.com
  • 使用認證: 是
  • 使用安全連線: 是
  • 使用者名稱: 你的 Gmail 賬戶 ID (比如 “alice” ,如果你的郵箱為 alice@gmail.com)
  • 密碼: 你的 Gmail 密碼
  • : 587

確切的配置根據應用會有所不同。在本教程的剩餘部分,我將向你展示一些在 Linux 上使用 Gmail SMTP 伺服器的應用示例。

從命令列傳送郵件

作為第一個例子,讓我們嘗試最基本的郵件功能:使用 Gmail SMTP 伺服器從命令列傳送一封郵件。為此,我將使用一個稱為 mutt 的命令列郵件客戶端。

先安裝 mutt:

對於 Debian-based 系統:

$ sudo apt-get install mutt

對於 Red Hat based 系統:

$ sudo yum install mutt

建立一個 mutt 配置檔案(~/.muttrc),並和下面一樣,在檔案中指定 Gmail SMTP 伺服器資訊。將 <gmail-id> 替換成自己的 Gmail ID。注意該配置只是為了傳送郵件而已(而非接收郵件)。

$ 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 傳送一封郵件:

$ 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

如何在 Linux 上使用 Gmail SMTP 伺服器傳送郵件通知

使用 Gmail SMTP 伺服器意味著郵件將顯示是從你 Gmail 賬戶發出的。換句話說,收件人將視你的 Gmail 地址為發件人地址。如果你想要使用自己的域名作為郵件傳送方,你需要使用 Gmail SMTP 轉發服務。

當伺服器重啟時傳送郵件通知

如果你在 虛擬專用伺服器(VPS) 上跑了些重要的網站,建議監控 VPS 的重啟行為。作為一個更為實用的例子,讓我們研究如何在你的 VPS 上為每一次重啟事件建立郵件通知。這裡假設你的 VPS 上使用的是 systemd,並向你展示如何為自動郵件通知建立一個自定義的 systemd 啟動服務。

首先建立下面的指令碼 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” 選項,用於指定系統級的 mutt 配置檔案位置。因此不要忘了建立 /etc/muttrc 檔案,並如前面描述的那樣填入 Gmail SMTP 資訊。

現在讓我們建立如下一個自定義的 systemd 服務。

$ 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

在建立服務後,新增並啟動該服務。

$ sudo systemctl enable reboot-task
$ sudo systemctl start reboot-task

從現在起,在每次 VPS 重啟時,你將會收到一封通知郵件。

如何在 Linux 上使用 Gmail SMTP 伺服器傳送郵件通知

通過伺服器使用監控傳送郵件通知

作為最後一個例子,讓我展示一個現實生活中的應用程式,Monit,這是一款極其有用的伺服器監控應用程式。它帶有全面的 VPS 監控能力(比如 CPU、記憶體、程式、檔案系統)和郵件通知功能。

如果你想要接收 VPS 上由 Monit 產生的任何事件的郵件通知,你可以在 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 負載超載而由 Monit 傳送的郵件通知的例子。

如何在 Linux 上使用 Gmail SMTP 伺服器傳送郵件通知

總結

如你所見,類似 Gmail 這樣免費的 SMTP 伺服器有著這麼多不同的運用方式 。但再次重申,請牢記免費的 SMTP 伺服器不適用於商業用途,僅僅適用於個人專案。無論你正在哪款應用中使用 Gmail SMTP 伺服器,歡迎自由分享你的用例。

相關文章