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_enabled,
|
||||||
:koding_url,
|
:koding_url,
|
||||||
:email_author_in_body,
|
:email_author_in_body,
|
||||||
|
:html_emails_enabled,
|
||||||
:repository_checks_enabled,
|
:repository_checks_enabled,
|
||||||
:metrics_packet_size,
|
:metrics_packet_size,
|
||||||
:send_user_confirmation_email,
|
:send_user_confirmation_email,
|
||||||
|
|
|
@ -443,7 +443,16 @@
|
||||||
Some email servers do not support overriding the email sender name.
|
Some email servers do not support overriding the email sender name.
|
||||||
Enable this option to include the name of the author of the issue,
|
Enable this option to include the name of the author of the issue,
|
||||||
merge request or comment in the email body instead.
|
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
|
%fieldset
|
||||||
%legend Automatic Git repository housekeeping
|
%legend Automatic Git repository housekeeping
|
||||||
.form-group
|
.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.
|
# 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
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
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_incremental_repack_period", default: 10, null: false
|
||||||
t.integer "housekeeping_full_repack_period", default: 50, null: false
|
t.integer "housekeeping_full_repack_period", default: 50, null: false
|
||||||
t.integer "housekeeping_gc_period", default: 200, null: false
|
t.integer "housekeeping_gc_period", default: 200, null: false
|
||||||
|
t.boolean "html_emails_enabled", default: true
|
||||||
end
|
end
|
||||||
|
|
||||||
create_table "audit_events", force: :cascade do |t|
|
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}/
|
is_expected.to have_body_text /#{diff_path}/
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue