Added smtp alerts
This commit is contained in:
parent
3703b13d81
commit
bc57f96b70
1 changed files with 29 additions and 1 deletions
30
email.go
30
email.go
|
|
@ -32,7 +32,7 @@ func emailSendHTML(subject, message string) error {
|
|||
|
||||
var auth smtp.Auth
|
||||
if cfgEmailSMTPUser != "" && cfgEmailSMTPPassword != "" {
|
||||
auth = smtp.PlainAuth("", cfgEmailSMTPUser, cfgEmailSMTPPassword, cfgEmailSMTPHost)
|
||||
auth = &emailLoginAuth{user: cfgEmailSMTPUser, password: cfgEmailSMTPPassword}
|
||||
}
|
||||
|
||||
header := strings.Join([]string{
|
||||
|
|
@ -55,6 +55,34 @@ func emailSendHTML(subject, message string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ── LOGIN Auth ───────────────────────────────────────────────────────────────
|
||||
// Реализация AUTH LOGIN для SMTP-серверов которые не поддерживают AUTH PLAIN.
|
||||
// Стандартный smtp.PlainAuth использует механизм PLAIN — некоторые серверы
|
||||
// (например Microsoft Exchange) принимают только LOGIN.
|
||||
|
||||
type emailLoginAuth struct {
|
||||
user string
|
||||
password string
|
||||
}
|
||||
|
||||
func (a *emailLoginAuth) Start(_ *smtp.ServerInfo) (string, []byte, error) {
|
||||
return "LOGIN", nil, nil
|
||||
}
|
||||
|
||||
func (a *emailLoginAuth) Next(fromServer []byte, more bool) ([]byte, error) {
|
||||
if !more {
|
||||
return nil, nil
|
||||
}
|
||||
switch strings.ToLower(strings.TrimSpace(string(fromServer))) {
|
||||
case "username:":
|
||||
return []byte(a.user), nil
|
||||
case "password:":
|
||||
return []byte(a.password), nil
|
||||
default:
|
||||
return nil, fmt.Errorf("неожиданный запрос от SMTP-сервера: %q", string(fromServer))
|
||||
}
|
||||
}
|
||||
|
||||
// emailBuildHTML оборачивает тело сообщения в HTML-шаблон письма.
|
||||
// Telegram-теги уже являются валидным HTML, поэтому конвертация не нужна.
|
||||
func emailBuildHTML(subject, body string) string {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue