From b4be7aed7711e51becb3be29ed82d6753cc73cc4 Mon Sep 17 00:00:00 2001 From: Jakub Jirutka Date: Sun, 15 Feb 2015 01:28:50 +0100 Subject: Allow to configure smtp and sendmail in gitlab.yml --- app/mailers/devise_mailer.rb | 4 +- app/mailers/emails/projects.rb | 2 +- app/mailers/notify.rb | 8 +-- config/gitlab.teatro.yml | 7 ++- config/gitlab.yml.example | 67 ++++++++++++++++++++---- config/initializers/1_settings.rb | 24 +++++++-- config/initializers/disable_email_interceptor.rb | 4 +- config/initializers/email_settings.rb | 5 ++ config/initializers/smtp_settings.rb.sample | 22 -------- lib/tasks/gitlab/check.rake | 2 +- spec/mailers/notify_spec.rb | 6 +-- 11 files changed, 100 insertions(+), 51 deletions(-) create mode 100644 config/initializers/email_settings.rb delete mode 100644 config/initializers/smtp_settings.rb.sample 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 @@ -134,6 +130,26 @@ Settings.gitlab.default_projects_features['visibility_level'] = Settings.send Settings.gitlab['repository_downloads_path'] = File.absolute_path(Settings.gitlab['repository_downloads_path'] || 'tmp/repositories', Rails.root) 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 # 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) } -- cgit v1.2.3