文件 v1.0.0

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 標頭,主旨未編碼 主旨或內文含中文時部分郵件客戶端會顯示亂碼
沒有重試與佇列 單次失敗即放棄
EN