diff --git a/cmd/serve.go b/cmd/serve.go index f869cd46..c799f5a6 100644 --- a/cmd/serve.go +++ b/cmd/serve.go @@ -177,8 +177,8 @@ func execServe(c *cli.Context) error { return errors.New("if set, certificate file must exist") } else if listenHTTPS != "" && (keyFile == "" || certFile == "") { return errors.New("if listen-https is set, both key-file and cert-file must be set") - } else if smtpSenderAddr != "" && (baseURL == "" || smtpSenderUser == "" || smtpSenderPass == "" || smtpSenderFrom == "") { - return errors.New("if smtp-sender-addr is set, base-url, smtp-sender-user, smtp-sender-pass and smtp-sender-from must also be set") + } else if smtpSenderAddr != "" && (baseURL == "" || smtpSenderFrom == "") { + return errors.New("if smtp-sender-addr is set, base-url, and smtp-sender-from must also be set") } else if smtpServerListen != "" && smtpServerDomain == "" { return errors.New("if smtp-server-listen is set, smtp-server-domain must also be set") } else if attachmentCacheDir != "" && baseURL == "" { diff --git a/docs/releases.md b/docs/releases.md index 4212f6d1..2ae03ca6 100644 --- a/docs/releases.md +++ b/docs/releases.md @@ -2,6 +2,12 @@ Binaries for all releases can be found on the GitHub releases pages for the [ntfy server](https://github.com/binwiederhier/ntfy/releases) and the [ntfy Android app](https://github.com/binwiederhier/ntfy-android/releases). +## ntfy server v2.2.0 (UNRELEASED) + +**Features:** + +* Support SMTP servers without auth ([#645](https://github.com/binwiederhier/ntfy/issues/645), thanks to [@Sharknoon](https://github.com/Sharknoon) for reporting) + ## ntfy server v2.1.1 Released March 1, 2023 diff --git a/server/log.go b/server/log.go index 8e521283..643f2ccb 100644 --- a/server/log.go +++ b/server/log.go @@ -31,7 +31,7 @@ const ( ) var ( - normalErrorCodes = []int{http.StatusNotFound, http.StatusBadRequest, http.StatusTooManyRequests, http.StatusUnauthorized, http.StatusInsufficientStorage} + normalErrorCodes = []int{http.StatusNotFound, http.StatusBadRequest, http.StatusTooManyRequests, http.StatusUnauthorized, http.StatusForbidden, http.StatusInsufficientStorage} rateLimitingErrorCodes = []int{http.StatusTooManyRequests, http.StatusRequestEntityTooLarge} ) diff --git a/server/server.yml b/server/server.yml index cb50633b..5c7955dd 100644 --- a/server/server.yml +++ b/server/server.yml @@ -117,18 +117,19 @@ # attachment-expiry-duration: "3h" # If enabled, allow outgoing e-mail notifications via the 'X-Email' header. If this header is set, -# messages will additionally be sent out as e-mail using an external SMTP server. As of today, only -# SMTP servers with plain text auth and STARTLS are supported. Please also refer to the rate limiting settings -# below (visitor-email-limit-burst & visitor-email-limit-burst). +# messages will additionally be sent out as e-mail using an external SMTP server. +# +# As of today, only SMTP servers with plain text auth (or no auth at all), and STARTLS are supported. +# Please also refer to the rate limiting settings below (visitor-email-limit-burst & visitor-email-limit-burst). # # - smtp-sender-addr is the hostname:port of the SMTP server -# - smtp-sender-user/smtp-sender-pass are the username and password of the SMTP user # - smtp-sender-from is the e-mail address of the sender +# - smtp-sender-user/smtp-sender-pass are the username and password of the SMTP user (leave blank for no auth) # # smtp-sender-addr: +# smtp-sender-from: # smtp-sender-user: # smtp-sender-pass: -# smtp-sender-from: # If enabled, ntfy will launch a lightweight SMTP server for incoming messages. Once configured, users can send # emails to a topic e-mail address to publish messages to a topic. diff --git a/server/smtp_sender.go b/server/smtp_sender.go index ee263658..26a0e0e6 100644 --- a/server/smtp_sender.go +++ b/server/smtp_sender.go @@ -36,7 +36,10 @@ func (s *smtpSender) Send(v *visitor, m *message, to string) error { if err != nil { return err } - auth := smtp.PlainAuth("", s.config.SMTPSenderUser, s.config.SMTPSenderPass, host) + var auth smtp.Auth + if s.config.SMTPSenderUser != "" { + auth = smtp.PlainAuth("", s.config.SMTPSenderUser, s.config.SMTPSenderPass, host) + } ev := logvm(v, m). Tag(tagEmail). Fields(log.Context{