diff options
Diffstat (limited to 'app/mailers')
-rw-r--r-- | app/mailers/devise_mailer.rb | 5 | ||||
-rw-r--r-- | app/mailers/emails/imports.rb | 15 | ||||
-rw-r--r-- | app/mailers/emails/profile.rb | 5 | ||||
-rw-r--r-- | app/mailers/emails/service_desk.rb | 33 | ||||
-rw-r--r-- | app/mailers/notify.rb | 1 | ||||
-rw-r--r-- | app/mailers/previews/notify_preview.rb | 4 |
6 files changed, 60 insertions, 3 deletions
diff --git a/app/mailers/devise_mailer.rb b/app/mailers/devise_mailer.rb index 61a23520d54..7129e577cb8 100644 --- a/app/mailers/devise_mailer.rb +++ b/app/mailers/devise_mailer.rb @@ -17,6 +17,11 @@ class DeviseMailer < Devise::Mailer devise_mail(record, :user_admin_approval, opts) end + def reset_password_instructions(record, token, opts = {}) + headers['X-Mailgun-Suppressions-Bypass'] = 'true' + super + end + protected def subject_for(key) diff --git a/app/mailers/emails/imports.rb b/app/mailers/emails/imports.rb new file mode 100644 index 00000000000..d3e8b90d686 --- /dev/null +++ b/app/mailers/emails/imports.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Emails + module Imports + def github_gists_import_errors_email(user_id, errors) + @errors = errors + user = User.find(user_id) + + email_with_layout( + to: user.notification_email_or_default, + subject: subject(s_('GithubImporter|GitHub Gists import finished with errors')) + ) + end + end +end diff --git a/app/mailers/emails/profile.rb b/app/mailers/emails/profile.rb index ede6007e0e2..5b1750400d8 100644 --- a/app/mailers/emails/profile.rb +++ b/app/mailers/emails/profile.rb @@ -83,14 +83,15 @@ module Emails end end - def access_token_expired_email(user) + def access_token_expired_email(user, token_names = []) return unless user && user.active? @user = user + @token_names = token_names @target_url = profile_personal_access_tokens_url Gitlab::I18n.with_locale(@user.preferred_language) do - mail_with_locale(to: @user.notification_email_or_default, subject: subject(_("Your personal access token has expired"))) + mail_with_locale(to: @user.notification_email_or_default, subject: subject(_("Your personal access tokens have expired"))) end end diff --git a/app/mailers/emails/service_desk.rb b/app/mailers/emails/service_desk.rb index 66eb2c646a9..2953ec6cbe5 100644 --- a/app/mailers/emails/service_desk.rb +++ b/app/mailers/emails/service_desk.rb @@ -5,6 +5,8 @@ module Emails extend ActiveSupport::Concern include MarkupHelper + EMAIL_ATTACHMENTS_SIZE_LIMIT = 10.megabytes.freeze + included do layout 'service_desk', only: [:service_desk_thank_you_email, :service_desk_new_note_email] end @@ -28,6 +30,7 @@ module Emails setup_service_desk_mail(issue_id) email_sender = sender(@note.author_id) + add_uploads_as_attachments if Feature.enabled?(:service_desk_new_note_email_native_attachments, @note.project) options = service_desk_options(email_sender, 'new_note', recipient) .merge(subject: subject_base) @@ -60,7 +63,8 @@ module Emails template = Gitlab::Template::ServiceDeskTemplate.find(email_type, @project) text = substitute_template_replacements(template.content) - context = { project: @project, pipeline: :email } + context = { project: @project, pipeline: :service_desk_email, uploads_as_attachments: @uploads_as_attachments } + context[:author] = @note.author if email_type == 'new_note' markdown(text, context) @@ -90,5 +94,32 @@ module Emails def subject_base "#{@issue.title} (##{@issue.iid})" end + + def add_uploads_as_attachments + uploaders = find_uploaders_for(@note) + return unless uploaders.present? + return if uploaders.sum(&:size) > EMAIL_ATTACHMENTS_SIZE_LIMIT + + @uploads_as_attachments = [] + uploaders.each do |uploader| + attachments[uploader.filename] = uploader.read + @uploads_as_attachments << "#{uploader.secret}/#{uploader.filename}" + rescue StandardError => e + Gitlab::ErrorTracking.track_exception(e, project_id: @note.project.id) + end + end + + def find_uploaders_for(note) + uploads = FileUploader::MARKDOWN_PATTERN.scan(note.note) + return unless uploads.present? + + project = note.project + uploads.map do |secret, file_name| + UploaderFinder.new(project, secret, file_name).execute + end + rescue StandardError => e + Gitlab::ErrorTracking.track_exception(e, project_id: note.project.id) + nil + end end end diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb index 5a3fc70832c..31726563662 100644 --- a/app/mailers/notify.rb +++ b/app/mailers/notify.rb @@ -24,6 +24,7 @@ class Notify < ApplicationMailer include Emails::InProductMarketing include Emails::AdminNotification include Emails::IdentityVerification + include Emails::Imports helper TimeboxesHelper helper MergeRequestsHelper diff --git a/app/mailers/previews/notify_preview.rb b/app/mailers/previews/notify_preview.rb index 7d7e01950c8..7ed594bf571 100644 --- a/app/mailers/previews/notify_preview.rb +++ b/app/mailers/previews/notify_preview.rb @@ -225,6 +225,10 @@ class NotifyPreview < ActionMailer::Preview Notify.project_was_moved_email(project.id, user.id, "gitlab/gitlab").message end + def github_gists_import_errors_email + Notify.github_gists_import_errors_email(user.id, { '12345' => 'Snippet maximum file count exceeded', '67890' => 'error message 2' }).message + end + private def project |