summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-05-06 15:59:21 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-05-06 15:59:21 +0300
commit86ec49add45d95f67fda749758d07a26ee030989 (patch)
tree1c2009ae71ffddb78538cdd8e608fc795d6f596d
parent3f2282300d9c97e8c0c1df955bdd13d7ee1dc96e (diff)
parentb4be7aed7711e51becb3be29ed82d6753cc73cc4 (diff)
downloadgitlab-ce-86ec49add45d95f67fda749758d07a26ee030989.tar.gz
Merge pull request #8800 from jirutka/email-settings
Allow to configure smtp and sendmail in gitlab.yml
-rw-r--r--app/mailers/devise_mailer.rb4
-rw-r--r--app/mailers/emails/projects.rb2
-rw-r--r--app/mailers/notify.rb8
-rw-r--r--config/gitlab.teatro.yml7
-rw-r--r--config/gitlab.yml.example67
-rw-r--r--config/initializers/1_settings.rb24
-rw-r--r--config/initializers/disable_email_interceptor.rb4
-rw-r--r--config/initializers/email_settings.rb5
-rw-r--r--config/initializers/smtp_settings.rb.sample22
-rw-r--r--lib/tasks/gitlab/check.rake2
-rw-r--r--spec/mailers/notify_spec.rb6
11 files changed, 100 insertions, 51 deletions
diff --git a/app/mailers/devise_mailer.rb b/app/mailers/devise_mailer.rb
index b616add283a..e4b65c19b3f 100644
--- a/app/mailers/devise_mailer.rb
+++ b/app/mailers/devise_mailer.rb
@@ -1,4 +1,4 @@
class DeviseMailer < Devise::Mailer
- default from: "#{Gitlab.config.gitlab.email_display_name} <#{Gitlab.config.gitlab.email_from}>"
- default reply_to: Gitlab.config.gitlab.email_reply_to
+ default from: "#{Gitlab.config.outgoing_emails.display_name} <#{Gitlab.config.outgoing_emails.from}>"
+ default reply_to: Gitlab.config.outgoing_emails.reply_to
end
diff --git a/app/mailers/emails/projects.rb b/app/mailers/emails/projects.rb
index 9cb7077e59d..c6bc716930d 100644
--- a/app/mailers/emails/projects.rb
+++ b/app/mailers/emails/projects.rb
@@ -129,7 +129,7 @@ module Emails
if send_from_committer_email && can_send_from_user_email?(@author)
@author.email
else
- Gitlab.config.gitlab.email_reply_to
+ Gitlab.config.outgoing_emails.reply_to
end
mail(from: sender(author_id, send_from_committer_email),
diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb
index 79fb48b00d3..a9800f7f103 100644
--- a/app/mailers/notify.rb
+++ b/app/mailers/notify.rb
@@ -17,7 +17,7 @@ class Notify < ActionMailer::Base
helper_method :current_user, :can?
default from: Proc.new { default_sender_address.format }
- default reply_to: Gitlab.config.gitlab.email_reply_to
+ default reply_to: Gitlab.config.outgoing_emails.reply_to
# Just send email with 2 seconds delay
def self.delay
@@ -50,9 +50,9 @@ class Notify < ActionMailer::Base
# The default email address to send emails from
def default_sender_address
- address = Mail::Address.new(Gitlab.config.gitlab.email_from)
- address.display_name = Gitlab.config.gitlab.email_display_name
- address
+ Mail::Address.new(Gitlab.config.outgoing_emails.from).tap do |address|
+ address.display_name = Gitlab.config.outgoing_emails.display_name
+ end
end
def can_send_from_user_email?(sender)
diff --git a/config/gitlab.teatro.yml b/config/gitlab.teatro.yml
index f0656400beb..07133503843 100644
--- a/config/gitlab.teatro.yml
+++ b/config/gitlab.teatro.yml
@@ -7,8 +7,6 @@ production: &base
user: root
- email_from: example@example.com
-
support_email: support@example.com
default_projects_features:
@@ -19,6 +17,9 @@ production: &base
snippets: false
visibility_level: "private" # can be "private" | "internal" | "public"
+ outgoing_emails:
+ from: example@example.com
+
issues_tracker:
gravatar:
@@ -75,6 +76,8 @@ test:
gitlab:
host: localhost
port: 80
+ outgoing_emails:
+ delivery_method: :test
issues_tracker:
redmine:
title: "Redmine"
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index bd2081688d1..f0b65e1e905 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -10,7 +10,7 @@
# How to use:
# 1. Copy file as gitlab.yml
# 2. Update gitlab -> host with your fully qualified domain name
-# 3. Update gitlab -> email_from
+# 3. Update outgoing_emails -> from
# 4. If you installed Git from source, change git -> bin_path to /usr/local/bin/git
# IMPORTANT: If Git was installed in a different location use that instead.
# You can check with `which git`. If a wrong path of Git is specified, it will
@@ -46,16 +46,6 @@ production: &base
# To see all available zones, run `bundle exec rake time:zones:all RAILS_ENV=production`
# time_zone: 'UTC'
- ## Email settings
- # Uncomment and set to false if you need to disable email sending from GitLab (default: true)
- # email_enabled: true
- # Email address used in the "From" field in mails sent by GitLab
- email_from: example@example.com
- email_display_name: GitLab
- email_reply_to: noreply@example.com
-
- # Email server smtp settings are in config/initializers/smtp_settings.rb.sample
-
# default_can_create_group: false # default: true
# username_changing_enabled: false # default: true - User can change her username/namespace
## Default theme
@@ -89,6 +79,57 @@ production: &base
# The default is 'tmp/repositories' relative to the root of the Rails app.
# repository_downloads_path: tmp/repositories
+ ## Settings for sending emails
+ outgoing_emails:
+
+ # Set to false if you need to disable email sending from GitLab (default: true).
+ enabled: true
+
+ # Email address and name used in the "From" field in mails sent by GitLab.
+ from: example@example.com
+ display_name: GitLab
+
+ # Email address used in "Reply-To" field in mails sent by GitLab.
+ reply_to: noreply@example.com
+
+ # Defines a delivery method. Possible values are:
+ # :sendmail - send emails using sendmail command (default).
+ # :smtp - send emails using SMTP server.
+ # :letter_opener - open sent emails in browser.
+ # :test - save emails to ActionMailer::Base.deliveries array.
+ delivery_method: :sendmail
+
+ # Settings for the :sendmail delivery method.
+ sendmail_settings:
+ # The location of the sendmail executable (default: /usr/sbin/sendmail).
+ location: /usr/sbin/sendmail
+
+ # The command line arguments to be passed to sendmail (default: -i -t).
+ arguments: '-i -t'
+
+ # Settings for the :smtp delivery method.
+ smtp_settings:
+ # Hostname of the SMTP server used to send emails (default: localhost).
+ address: localhost
+
+ # Port of the SMTP server used to send emails (default: 25).
+ port: 25
+
+ # If your mail server requires authentication, you need to specify the
+ # authentication type here. Possible values are:
+ # :plain - send the password in the clear text.
+ # :login - send password Base64 encoded.
+ # :cram_md5 - combines a Challenge/Response mechanism to exchange information and
+ # a cryptographic Message Digest 5 algorithm to hash important information.
+ # authentication: :plain
+ # user_name: 'gitlab'
+ # password: '123456'
+
+ # Detects if STARTTLS is enabled in your SMTP server and starts to use it.
+ # Set this to false if there is a problem with your server certificate
+ # that you cannot resolve. It should be true for Gmail SMTP.
+ # enable_starttls_auto: true
+
## Gravatar
## For Libravatar see: http://doc.gitlab.com/ce/customization/libravatar.html
gravatar:
@@ -295,6 +336,8 @@ production: &base
development:
<<: *base
+ outgoing_emails:
+ delivery_method: :letter_opener
test:
<<: *base
@@ -303,6 +346,8 @@ test:
gitlab:
host: localhost
port: 80
+ outgoing_emails:
+ delivery_method: :test
# When you run tests we clone and setup gitlab-shell
# In order to setup it correctly you need to specify
diff --git a/config/initializers/1_settings.rb b/config/initializers/1_settings.rb
index e5ac66a2323..ce0023e0795 100644
--- a/config/initializers/1_settings.rb
+++ b/config/initializers/1_settings.rb
@@ -105,10 +105,6 @@ Settings.gitlab['https'] = false if Settings.gitlab['https'].nil?
Settings.gitlab['port'] ||= Settings.gitlab.https ? 443 : 80
Settings.gitlab['relative_url_root'] ||= ENV['RAILS_RELATIVE_URL_ROOT'] || ''
Settings.gitlab['protocol'] ||= Settings.gitlab.https ? "https" : "http"
-Settings.gitlab['email_enabled'] ||= true if Settings.gitlab['email_enabled'].nil?
-Settings.gitlab['email_from'] ||= "gitlab@#{Settings.gitlab.host}"
-Settings.gitlab['email_display_name'] ||= "GitLab"
-Settings.gitlab['email_reply_to'] ||= "noreply@#{Settings.gitlab.host}"
Settings.gitlab['url'] ||= Settings.send(:build_gitlab_url)
Settings.gitlab['user'] ||= 'git'
Settings.gitlab['user_home'] ||= begin
@@ -135,6 +131,26 @@ Settings.gitlab['repository_downloads_path'] = File.absolute_path(Settings.gitla
Settings.gitlab['restricted_signup_domains'] ||= []
#
+# Outgoing emails
+#
+Settings['outgoing_emails'] ||= Settingslogic.new({})
+Settings['outgoing_emails'].tap do |opts|
+ # For backward compatibility. TODO remove in next major release.
+ opts['enabled'] ||= Settings.gitlab['email_enabled']
+ opts['from'] ||= Settings.gitlab['email_from']
+ opts['display_name'] ||= Settings.gitlab['display_name']
+ opts['reply_to'] ||= Settings.gitlab['email_reply_to']
+
+ opts['enabled'] ||= opts['enabled'].nil?
+ opts['display_name'] ||= "GitLab"
+ opts['from'] ||= "gitlab@#{Settings.gitlab.host}"
+ opts['reply_to'] ||= "noreply@#{Settings.gitlab.host}"
+ opts['delivery_method'] ||= :sendmail
+ opts['sendmail_settings'] ||= {}
+ opts['smtp_settings'] ||= {}
+end
+
+#
# Gravatar
#
Settings['gravatar'] ||= Settingslogic.new({})
diff --git a/config/initializers/disable_email_interceptor.rb b/config/initializers/disable_email_interceptor.rb
index c76a6b8b19f..122a5829916 100644
--- a/config/initializers/disable_email_interceptor.rb
+++ b/config/initializers/disable_email_interceptor.rb
@@ -1,2 +1,4 @@
# Interceptor in lib/disable_email_interceptor.rb
-ActionMailer::Base.register_interceptor(DisableEmailInterceptor) unless Gitlab.config.gitlab.email_enabled
+unless Gitlab.config.outgoing_emails.enabled
+ ActionMailer::Base.register_interceptor(DisableEmailInterceptor)
+end
diff --git a/config/initializers/email_settings.rb b/config/initializers/email_settings.rb
new file mode 100644
index 00000000000..99cb09ebfd0
--- /dev/null
+++ b/config/initializers/email_settings.rb
@@ -0,0 +1,5 @@
+Gitlab.config.outgoing_emails.tap do |c|
+ Gitlab::Application.config.action_mailer.delivery_method = c.delivery_method
+ ActionMailer::Base.smtp_settings = c.smtp_settings.symbolize_keys
+ ActionMailer::Base.sendmail_settings = c.sendmail_settings.symbolize_keys
+end
diff --git a/config/initializers/smtp_settings.rb.sample b/config/initializers/smtp_settings.rb.sample
deleted file mode 100644
index f0fe2fdfa43..00000000000
--- a/config/initializers/smtp_settings.rb.sample
+++ /dev/null
@@ -1,22 +0,0 @@
-# To enable smtp email delivery for your GitLab instance do the following:
-# 1. Rename this file to smtp_settings.rb
-# 2. Edit settings inside this file
-# 3. Restart GitLab instance
-#
-# For full list of options and their values see http://api.rubyonrails.org/classes/ActionMailer/Base.html
-#
-
-if Rails.env.production?
- Gitlab::Application.config.action_mailer.delivery_method = :smtp
-
- ActionMailer::Base.smtp_settings = {
- address: "email.server.com",
- port: 456,
- user_name: "smtp",
- password: "123456",
- domain: "gitlab.company.com",
- authentication: :login,
- enable_starttls_auto: true,
- openssl_verify_mode: 'peer' # See ActionMailer documentation for other possible options
- }
-end
diff --git a/lib/tasks/gitlab/check.rake b/lib/tasks/gitlab/check.rake
index 1a6303b6c82..f967fddf56d 100644
--- a/lib/tasks/gitlab/check.rake
+++ b/lib/tasks/gitlab/check.rake
@@ -320,7 +320,7 @@ namespace :gitlab do
options = {
"user.name" => "GitLab",
- "user.email" => Gitlab.config.gitlab.email_from,
+ "user.email" => Gitlab.config.outgoing_emails.from,
"core.autocrlf" => "input"
}
correct_options = options.map do |name, value|
diff --git a/spec/mailers/notify_spec.rb b/spec/mailers/notify_spec.rb
index dbcf7286e45..f626efe1f76 100644
--- a/spec/mailers/notify_spec.rb
+++ b/spec/mailers/notify_spec.rb
@@ -5,9 +5,9 @@ describe Notify do
include EmailSpec::Matchers
include RepoHelpers
- let(:gitlab_sender_display_name) { Gitlab.config.gitlab.email_display_name }
- let(:gitlab_sender) { Gitlab.config.gitlab.email_from }
- let(:gitlab_sender_reply_to) { Gitlab.config.gitlab.email_reply_to }
+ let(:gitlab_sender_display_name) { Gitlab.config.outgoing_emails.display_name }
+ let(:gitlab_sender) { Gitlab.config.outgoing_emails.from }
+ let(:gitlab_sender_reply_to) { Gitlab.config.outgoing_emails.reply_to }
let(:recipient) { create(:user, email: 'recipient@example.com') }
let(:project) { create(:project) }