Skip to content

Commit

Permalink
fix: Allow SMTP without StartTLS (getfider#926)
Browse files Browse the repository at this point in the history
Co-authored-by: Guilherme Oenning <[email protected]>
  • Loading branch information
gs11 and goenning authored Mar 23, 2021
1 parent 919ea3d commit f10ee5d
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 11 deletions.
9 changes: 5 additions & 4 deletions app/pkg/env/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,11 @@ type config struct {
Region string `env:"EMAIL_MAILGUN_REGION,default=US"`
}
SMTP struct {
Host string `env:"EMAIL_SMTP_HOST"`
Port string `env:"EMAIL_SMTP_PORT"`
Username string `env:"EMAIL_SMTP_USERNAME"`
Password string `env:"EMAIL_SMTP_PASSWORD"`
Host string `env:"EMAIL_SMTP_HOST"`
Port string `env:"EMAIL_SMTP_PORT"`
Username string `env:"EMAIL_SMTP_USERNAME"`
Password string `env:"EMAIL_SMTP_PASSWORD"`
EnableStartTLS bool `env:"EMAIL_SMTP_ENABLE_STARTTLS,default=true"`
}
}
BlobStorage struct {
Expand Down
14 changes: 8 additions & 6 deletions app/services/email/smtp/smtp.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,15 +89,15 @@ func sendMail(ctx context.Context, c *cmd.SendMail) {
smtpConfig := env.Config.Email.SMTP
servername := fmt.Sprintf("%s:%s", smtpConfig.Host, smtpConfig.Port)
auth := authenticate(smtpConfig.Username, smtpConfig.Password, smtpConfig.Host)
err = Send(localname, servername, auth, email.NoReply, []string{to.Address}, b.Bytes())
err = Send(localname, servername, smtpConfig.EnableStartTLS, auth, email.NoReply, []string{to.Address}, b.Bytes())
if err != nil {
panic(errors.Wrap(err, "failed to send email with template %s", c.TemplateName))
}
log.Debug(ctx, "Email sent.")
}
}

var Send = func(localName, serverAddress string, a gosmtp.Auth, from string, to []string, msg []byte) error {
var Send = func(localName, serverAddress string, enableStartTLS bool, a gosmtp.Auth, from string, to []string, msg []byte) error {
host, _, _ := net.SplitHostPort(serverAddress)
c, err := gosmtp.Dial(serverAddress)
if err != nil {
Expand All @@ -107,10 +107,12 @@ var Send = func(localName, serverAddress string, a gosmtp.Auth, from string, to
if err = c.Hello(localName); err != nil {
return err
}
if ok, _ := c.Extension("STARTTLS"); ok {
config := &tls.Config{ServerName: host}
if err = c.StartTLS(config); err != nil {
return err
if enableStartTLS {
if ok, _ := c.Extension("STARTTLS"); ok {
config := &tls.Config{ServerName: host}
if err = c.StartTLS(config); err != nil {
return err
}
}
}
if a != nil {
Expand Down
2 changes: 1 addition & 1 deletion app/services/email/smtp/smtp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ var ctx context.Context

var requests = make([]request, 0)

func mockSend(localname, servername string, auth gosmtp.Auth, from string, to []string, body []byte) error {
func mockSend(localname, servername string, enableStartTLS bool, auth gosmtp.Auth, from string, to []string, body []byte) error {
requests = append(requests, request{servername, auth, from, to, body})
return nil
}
Expand Down

0 comments on commit f10ee5d

Please sign in to comment.