Email 通知
本頁說明 IP 加入 Deny 名單時的 SMTP 通知、自訂主旨與內文,以及 net/smtp 帶來的連線限制。
觸發時機
只有 Deny.Add 會寄信,且在寫入 Redis 與名單檔成功後以 goroutine 非同步執行;Config.Email 為 nil 時不寄送。寄送失敗只記錄錯誤,不影響 Add 的回傳值。
設定
subject := func(ip, reason string) string {
return "[Sentry] banned " + ip
}
sentry, err := golangIPSentry.New(golangIPSentry.Config{
Redis: golangIPSentry.Redis{Host: "localhost", Port: 6379},
Email: &golangIPSentry.EmailConfig{
Host: "smtp.example.com",
Port: 587,
Username: "alert@example.com",
Password: "app-password",
From: "alert@example.com",
To: []string{"ops@example.com"},
Subject: &subject,
},
Parameter: golangIPSentry.Parameter{
BlockTimeMin: 5 * time.Minute,
BlockTimeMax: 24 * time.Hour,
},
})
if err != nil {
log.Fatal(err)
}
| 欄位 | 預設 |
|---|---|
Subject |
[IP Sentry] IP {ip} has been banned |
Body |
[IP Sentry] IP {ip} has been banned for {reason} |
自訂函式回傳空字串時回退預設值。Subject/Body 帶 json:"-",從 JSON 載入設定時只能另外以程式指定。
SMTP 限制
寄送使用標準函式庫 smtp.SendMail 搭配 PLAIN 認證:
| 限制 | 影響 |
|---|---|
| 不支援隱含 TLS(465 埠) | 使用 587 埠,由伺服器提供 STARTTLS |
| PLAIN 認證拒絕在未加密連線送出密碼(localhost 除外) | 伺服器不支援 STARTTLS 時寄送失敗 |
CC 只寫入信件標頭 |
收件者清單只有 To,副本收件人實際收不到,見 已知問題 |
沒有 MIME-Version/Content-Type 標頭,主旨未編碼 |
主旨或內文含中文時部分郵件客戶端會顯示亂碼 |
| 沒有重試與佇列 | 單次失敗即放棄 |