Commit b4be7aed authored by Jakub Jirutka's avatar Jakub Jirutka

Allow to configure smtp and sendmail in gitlab.yml

parent 7af59c54
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
......@@ -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),
......
......@@ -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)
......
......@@ -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"
......
......@@ -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
......
......@@ -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
#
......
# 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
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
# 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
......@@ -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|
......
......@@ -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) }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment