Merge branch '24880-configurable-plaintext-emails' into 'master'
Add setting to enable/disable HTML emails Closes #24880 See merge request !7749
This commit is contained in:
commit
d8eee8ed73
8 changed files with 94 additions and 2 deletions
|
@ -112,6 +112,7 @@ class Admin::ApplicationSettingsController < Admin::ApplicationController
|
|||
:koding_enabled,
|
||||
:koding_url,
|
||||
:email_author_in_body,
|
||||
:html_emails_enabled,
|
||||
:repository_checks_enabled,
|
||||
:metrics_packet_size,
|
||||
:send_user_confirmation_email,
|
||||
|
|
|
@ -443,7 +443,16 @@
|
|||
Some email servers do not support overriding the email sender name.
|
||||
Enable this option to include the name of the author of the issue,
|
||||
merge request or comment in the email body instead.
|
||||
|
||||
.form-group
|
||||
.col-sm-offset-2.col-sm-10
|
||||
.checkbox
|
||||
= f.label :html_emails_enabled do
|
||||
= f.check_box :html_emails_enabled
|
||||
Enable HTML emails
|
||||
.help-block
|
||||
By default GitLab sends emails in HTML and plain text formats so mail
|
||||
clients can choose what format to use. Disable this option if you only
|
||||
want to send emails in plain text format.
|
||||
%fieldset
|
||||
%legend Automatic Git repository housekeeping
|
||||
.form-group
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
title: Add setting to enable/disable HTML emails
|
||||
merge_request: 7749
|
||||
author:
|
2
config/initializers/email_template_interceptor.rb
Normal file
2
config/initializers/email_template_interceptor.rb
Normal file
|
@ -0,0 +1,2 @@
|
|||
# Interceptor in lib/email_template_interceptor.rb
|
||||
ActionMailer::Base.register_interceptor(EmailTemplateInterceptor)
|
|
@ -0,0 +1,29 @@
|
|||
# See http://doc.gitlab.com/ce/development/migration_style_guide.html
|
||||
# for more information on how to write migrations for GitLab.
|
||||
|
||||
class AddHtmlEmailsEnabledToApplicationSettings < ActiveRecord::Migration
|
||||
include Gitlab::Database::MigrationHelpers
|
||||
|
||||
# Set this constant to true if this migration requires downtime.
|
||||
DOWNTIME = false
|
||||
|
||||
# When a migration requires downtime you **must** uncomment the following
|
||||
# constant and define a short and easy to understand explanation as to why the
|
||||
# migration requires downtime.
|
||||
# DOWNTIME_REASON = ''
|
||||
|
||||
# When using the methods "add_concurrent_index" or "add_column_with_default"
|
||||
# you must disable the use of transactions as these methods can not run in an
|
||||
# existing transaction. When using "add_concurrent_index" make sure that this
|
||||
# method is the _only_ method called in the migration, any other changes
|
||||
# should go in a separate migration. This ensures that upon failure _only_ the
|
||||
# index creation fails and can be retried or reverted easily.
|
||||
#
|
||||
# To disable transactions uncomment the following line and remove these
|
||||
# comments:
|
||||
# disable_ddl_transaction!
|
||||
|
||||
def change
|
||||
add_column :application_settings, :html_emails_enabled, :boolean, default: true
|
||||
end
|
||||
end
|
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20161118183841) do
|
||||
ActiveRecord::Schema.define(version: 20161128161412) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -106,6 +106,7 @@ ActiveRecord::Schema.define(version: 20161118183841) do
|
|||
t.integer "housekeeping_incremental_repack_period", default: 10, null: false
|
||||
t.integer "housekeeping_full_repack_period", default: 50, null: false
|
||||
t.integer "housekeeping_gc_period", default: 200, null: false
|
||||
t.boolean "html_emails_enabled", default: true
|
||||
end
|
||||
|
||||
create_table "audit_events", force: :cascade do |t|
|
||||
|
|
13
lib/email_template_interceptor.rb
Normal file
13
lib/email_template_interceptor.rb
Normal file
|
@ -0,0 +1,13 @@
|
|||
# Read about interceptors in http://guides.rubyonrails.org/action_mailer_basics.html#intercepting-emails
|
||||
class EmailTemplateInterceptor
|
||||
include Gitlab::CurrentSettings
|
||||
|
||||
def self.delivering_email(message)
|
||||
# Remove HTML part if HTML emails are disabled.
|
||||
unless current_application_settings.html_emails_enabled
|
||||
message.part.delete_if do |part|
|
||||
part.content_type.try(:start_with?, 'text/html')
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1172,4 +1172,38 @@ describe Notify do
|
|||
is_expected.to have_body_text /#{diff_path}/
|
||||
end
|
||||
end
|
||||
|
||||
describe 'HTML emails setting' do
|
||||
let(:project) { create(:project) }
|
||||
let(:user) { create(:user) }
|
||||
let(:multipart_mail) { Notify.project_was_moved_email(project.id, user.id, "gitlab/gitlab") }
|
||||
|
||||
context 'when disabled' do
|
||||
it 'only sends the text template' do
|
||||
stub_application_setting(html_emails_enabled: false)
|
||||
|
||||
EmailTemplateInterceptor.delivering_email(multipart_mail)
|
||||
|
||||
expect(multipart_mail).to have_part_with('text/plain')
|
||||
expect(multipart_mail).not_to have_part_with('text/html')
|
||||
end
|
||||
end
|
||||
|
||||
context 'when enabled' do
|
||||
it 'sends a multipart message' do
|
||||
stub_application_setting(html_emails_enabled: true)
|
||||
|
||||
EmailTemplateInterceptor.delivering_email(multipart_mail)
|
||||
|
||||
expect(multipart_mail).to have_part_with('text/plain')
|
||||
expect(multipart_mail).to have_part_with('text/html')
|
||||
end
|
||||
end
|
||||
|
||||
matcher :have_part_with do |expected|
|
||||
match do |actual|
|
||||
actual.body.parts.any? { |part| part.content_type.try(:match, %r(#{expected})) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue