Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

redmineメール通知をカスタマイズする

redmineのメール通知機能をカスタマイズする方法をメモします。

優先度が最も高いチケットのみメールする

(旧)

models/issue.rb
  # Returns the users that should be notified
  def notified_users
    ...省略...
    notified += project.notified_users
    notified += project.users.preload(:preference).select(&:notify_about_high_priority_issues?) if priority.high?
    notified.uniq!
    ...省略...
  end
models/issue_priority.rb
  def high?
    position > self.class.default_or_middle.position
  end
views/users/_mail_notifications.html.erb
<% if IssuePriority.default_or_middle and high_priority = IssuePriority.where(['position > ?', IssuePriority.default_or_middle.position]).first %>
<p>
  <%= pref_fields.check_box :notify_about_high_priority_issues %>
  <label for="pref_notify_about_high_priority_issues"><%= t(:label_user_mail_notify_about_high_priority_issues_html, prio: high_priority.name.downcase) %></label>
</p>
<% end %>

(新)

models/issue.rb
  # Returns the users that should be notified
  def notified_users
    ...省略...
    notified += project.notified_users
    notified += project.users.preload(:preference).select(&:notify_about_high_priority_issues?) if priority.highest?
    notified.uniq!
    ...省略...
  end
models/issue_priority.rb
  def high?
    position > self.class.default_or_middle.position
  end

  def highest?
    position_name == "highest"
  end
views/users/_mail_notifications.html.erb
<% if IssuePriority.default_or_middle and highest_priority = IssuePriority.where(['position_name = ?', 'highest']).first %>
<p>
  <%= pref_fields.check_box :notify_about_high_priority_issues %>
  <label for="pref_notify_about_high_priority_issues"><%= t(:label_user_mail_notify_about_high_priority_issues_html, prio: highest_priority.name.downcase) %></label>
</p>
<% end %>

メールのタイトルにサーバ名を常に表示する

(旧)

models/mailer.rb
  def issue_add(user, issue)
    ...省略...
    subject = "[#{issue.project.name} - #{issue.tracker.name} ##{issue.id}]"
    subject += " (#{issue.status.name})" if Setting.show_status_changes_in_mail_subject?
    subject += " #{issue.subject}"
    mail :to => user,
      :subject => subject
  end

(新)

models/mailer.rb
  def issue_add(user, issue)
    ...省略...
    subject = "[#{Setting.host_name} #{issue.project.name}] "
    subject += "#{issue.tracker.name} ##{issue.id}"
    subject += " (#{issue.status.name})" if Setting.show_status_changes_in_mail_subject?
    subject += " #{issue.subject}"
    mail :to => user,
      :subject => subject
  end

いろいろな場所にこの設定ありますので,ソース見て適宜書き換えをお願いします。

メールの送信アドレスをチケット更新者にする

smtpサーバに認証がかかっている場合は,サーバ側で上書きされるため上手くいかない可能性があります。サーバ再起動後,送信されるメールが, 送信アドレスと表示名があっている ことを確認お願いします。

ドラフト版でばgmailは無理と記載しておりましたが,以下のように' <' + @author.mail + '>'と半角スペースはさむことで送信アドレス表示できるようになりました。

(旧)

models/mailer.rb
def mail(headers={}, &block)
    # Add a display name to the From field if Setting.mail_from does not
    # include it
    begin
      mail_from = Mail::Address.new(Setting.mail_from)
      if mail_from.display_name.blank? && mail_from.comments.blank?
        mail_from.display_name =
          @author&.logged? ? @author.name : Setting.app_title
      end
      from = mail_from.format
      list_id = "<#{mail_from.address.to_s.tr('@', '.')}>"
    rescue Mail::Field::IncompleteParseError
      ...省略...
    end

(新)

models/mailer.rb
def mail(headers={}, &block)
    # Add a display name to the From field if Setting.mail_from does not
    # include it
    begin
      mail_from = Mail::Address.new(Setting.mail_from)
      if mail_from.display_name.blank? && mail_from.comments.blank?
        if @author&.logged?
          mail_from.display_name = @author.name

          # Add author address 20201205
          from = @author.name + ' <' + @author.mail + '>'
        else
          mail_from.display_name = Setting.app_title
          from = mail_from.format
        end
      else
        from = mail_from.format
      end
      list_id = "<#{mail_from.address.to_s.tr('@', '.')}>"
    rescue Mail::Field::IncompleteParseError
      ...省略...
    end

環境

redmica 1.2 (redmine 4.2相当)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?