mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
FIX: Use login SMTP auth for office365 in group mailer (#27931)
Followup 7b627dc14b
In this other commit, I changed the email settings validator
to always use the `login` authentication method for
office365 and outlook, but I didn't change the actual
group SMTP mailer to do this.
This commit fixes that issue and does some minor refactoring.
This commit is contained in:
@@ -15,7 +15,9 @@ class GroupSmtpMailer < ActionMailer::Base
|
||||
domain: from_group.email_username_domain,
|
||||
user_name: from_group.email_username,
|
||||
password: from_group.email_password,
|
||||
authentication: GlobalSetting.smtp_authentication,
|
||||
# NOTE: Might be better at some point to store this authentication method in the database
|
||||
# against the group.
|
||||
authentication: SmtpProviderOverrides.authentication_override(from_group.smtp_server),
|
||||
enable_starttls_auto: from_group.smtp_ssl,
|
||||
return_response: true,
|
||||
open_timeout: GlobalSetting.group_smtp_open_timeout,
|
||||
|
||||
@@ -84,15 +84,15 @@ class EmailSettingsValidator
|
||||
)
|
||||
begin
|
||||
port, enable_tls, enable_starttls_auto =
|
||||
provider_specific_ssl_overrides(host, port, enable_tls, enable_starttls_auto)
|
||||
SmtpProviderOverrides.ssl_override(host, port, enable_tls, enable_starttls_auto)
|
||||
|
||||
if enable_tls && enable_starttls_auto
|
||||
raise ArgumentError, "TLS and STARTTLS are mutually exclusive"
|
||||
end
|
||||
|
||||
if username || password
|
||||
authentication = provider_specific_authentication_overrides(host) if authentication.nil?
|
||||
authentication = (authentication || GlobalSetting.smtp_authentication)&.to_sym
|
||||
authentication = SmtpProviderOverrides.authentication_override(host) if authentication.nil?
|
||||
authentication = authentication.to_sym
|
||||
if !%i[plain login cram_md5].include?(authentication)
|
||||
raise ArgumentError, "Invalid authentication method. Must be plain, login, or cram_md5."
|
||||
end
|
||||
@@ -180,29 +180,4 @@ class EmailSettingsValidator
|
||||
end
|
||||
raise err
|
||||
end
|
||||
|
||||
# Ideally we (or net-smtp) would automatically detect the correct authentication
|
||||
# method, but this is sufficient for our purposes because we know certain providers
|
||||
# need certain authentication methods. This may need to change when we start to
|
||||
# use XOAUTH2 for SMTP.
|
||||
def self.provider_specific_authentication_overrides(host)
|
||||
return :login if %w[smtp.office365.com smtp-mail.outlook.com].include?(host)
|
||||
:plain
|
||||
end
|
||||
|
||||
def self.provider_specific_ssl_overrides(host, port, enable_tls, enable_starttls_auto)
|
||||
# Certain mail servers act weirdly if you do not use the correct combinations of
|
||||
# TLS settings based on the port, we clean these up here for the user.
|
||||
if %w[smtp.gmail.com smtp.office365.com smtp-mail.outlook.com].include?(host)
|
||||
if port.to_i == 587
|
||||
enable_starttls_auto = true
|
||||
enable_tls = false
|
||||
elsif port.to_i == 465
|
||||
enable_starttls_auto = false
|
||||
enable_tls = true
|
||||
end
|
||||
end
|
||||
|
||||
[port, enable_tls, enable_starttls_auto]
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user