mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 12:42:16 +08:00
FIX: Make disabling TLS in mail possible again
Following the Rails 7 upgrade, the `DISCOURSE_SMTP_ENABLE_START_TLS` setting doesn’t work anymore. This is because Rails upgraded the `net-smtp` gem to the 0.3.1 version which enables `starttls` by default. The `mail` gem doesn’t support this new behavior yet and doesn’t know how to disable TLS. This should be fixed in an upcoming release. Meanwhile applying this patch allows us to get back the previous behavior which is expected by many.
This commit is contained in:
parent
284db78055
commit
fff3ff11c0
2
Gemfile
2
Gemfile
|
@ -41,7 +41,7 @@ gem 'actionview_precompiler', require: false
|
|||
|
||||
gem 'seed-fu'
|
||||
|
||||
gem 'mail', git: 'https://github.com/discourse/mail.git', require: false
|
||||
gem 'mail', git: 'https://github.com/discourse/mail.git'
|
||||
gem 'mini_mime'
|
||||
gem 'mini_suffix'
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ Discourse::Application.configure do
|
|||
settings[:tls] = true
|
||||
end
|
||||
|
||||
config.action_mailer.smtp_settings = settings.reject { |_, y| y.nil? }
|
||||
config.action_mailer.smtp_settings = settings.compact
|
||||
else
|
||||
config.action_mailer.delivery_method = :sendmail
|
||||
config.action_mailer.sendmail_settings = { arguments: '-i' }
|
||||
|
|
21
lib/freedom_patches/mail_disable_starttls.rb
Normal file
21
lib/freedom_patches/mail_disable_starttls.rb
Normal file
|
@ -0,0 +1,21 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Patch from
|
||||
# https://github.com/rails/rails/issues/44698#issuecomment-1069675285 to enable
|
||||
# previous behavior with Net::SMTP regarding TLS.
|
||||
#
|
||||
# This should be fixed in an upcoming release of the Mail gem (probably 2.8),
|
||||
# when this patch is merged: https://github.com/mikel/mail/pull/1435
|
||||
module FreedomPatches::MailDisableStarttls
|
||||
def build_smtp_session
|
||||
super.tap do |smtp|
|
||||
unless settings[:enable_starttls_auto]
|
||||
if smtp.respond_to?(:disable_starttls)
|
||||
smtp.disable_starttls
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
::Mail::SMTP.prepend(self)
|
||||
end
|
23
spec/lib/freedom_patches/mail_disable_starttls_spec.rb
Normal file
23
spec/lib/freedom_patches/mail_disable_starttls_spec.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
describe FreedomPatches::MailDisableStarttls do
|
||||
subject(:smtp_session) { smtp.build_smtp_session }
|
||||
|
||||
let(:smtp) { Mail::SMTP.new(options) }
|
||||
|
||||
context "when the starttls option is not provided" do
|
||||
let(:options) { {} }
|
||||
|
||||
it "doesn't disable starttls" do
|
||||
expect(smtp_session).to be_starttls
|
||||
end
|
||||
end
|
||||
|
||||
context "when the starttls option is set to `false`" do
|
||||
let(:options) { { enable_starttls_auto: false } }
|
||||
|
||||
it "properly disables starttls" do
|
||||
expect(smtp_session).not_to be_starttls
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue
Block a user