Add settings to allow different SMTP envelope from address (#17479)

* Add settings to allow different SMTP envelope from address

Sometimes it may be advisable to hide or alias the from address on an SMTP mail
envelope. This PR adds two new options to the mailer to allow setting of an overriding
from address.

Fix #17477

Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
zeripath 2021-11-19 15:35:20 +00:00 committed by GitHub
parent d4e281bc02
commit 38347aa16f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 43 additions and 10 deletions

View file

@ -16,13 +16,15 @@ import (
// Mailer represents mail service.
type Mailer struct {
// Mailer
Name string
From string
FromName string
FromEmail string
SendAsPlainText bool
MailerType string
SubjectPrefix string
Name string
From string
EnvelopeFrom string
OverrideEnvelopeFrom bool `ini:"-"`
FromName string
FromEmail string
SendAsPlainText bool
MailerType string
SubjectPrefix string
// SMTP sender
Host string
@ -73,6 +75,7 @@ func newMailService() {
SendmailTimeout: sec.Key("SENDMAIL_TIMEOUT").MustDuration(5 * time.Minute),
}
MailService.From = sec.Key("FROM").MustString(MailService.User)
MailService.EnvelopeFrom = sec.Key("ENVELOPE_FROM").MustString("")
if sec.HasKey("ENABLE_HTML_ALTERNATIVE") {
log.Warn("ENABLE_HTML_ALTERNATIVE is deprecated, use SEND_AS_PLAIN_TEXT")
@ -93,6 +96,21 @@ func newMailService() {
MailService.FromName = parsed.Name
MailService.FromEmail = parsed.Address
switch MailService.EnvelopeFrom {
case "":
MailService.OverrideEnvelopeFrom = false
case "<>":
MailService.EnvelopeFrom = ""
MailService.OverrideEnvelopeFrom = true
default:
parsed, err = mail.ParseAddress(MailService.EnvelopeFrom)
if err != nil {
log.Fatal("Invalid mailer.ENVELOPE_FROM (%s): %v", MailService.EnvelopeFrom, err)
}
MailService.OverrideEnvelopeFrom = true
MailService.EnvelopeFrom = parsed.Address
}
if MailService.MailerType == "" {
MailService.MailerType = "smtp"
}