首页 > 解决方案 > redmain的mailer.rb的patch mail方法

问题描述

我需要在我的插件中更改 redmine 邮件程序的这种行为:class Mailer < ActionMailer::Base

 def mail(headers={}, &block)
    headers.reverse_merge! 'X-Mailer' => 'Redmine',
            'X-Redmine-Host' => Setting.host_name,
            'X-Redmine-Site' => Setting.app_title,
            'X-Auto-Response-Suppress' => 'All',
            'Auto-Submitted' => 'auto-generated',
            'From' => Setting.mail_from,
            'List-Id' => "<#{Setting.mail_from.to_s.tr('@', '.')}>"

我需要从我的插件中为一个特殊项目更改“From”值,而无需重写 redmine 源。可能吗?

我尝试这样的 redmine 补丁:

require_dependency 'mailer'

module MyPlugin
  module Patches
    module MailerPatch
      def self.included(base)
        base.send(:prepend, InstanceMethods)
        base.send(:extend, ClassMethods)
      end

...

# Builds a mail for notifying user about an issue info required
        def issue_info_required(user, journal)
          @issue    = journal.journalized
          @journal  = journal
          @author   = journal.user
          @user     = user
          redmine_headers 'Project' => @issue.project.identifier,
                          'Issue-Id' => @issue.id,
                          'Issue-Author' => @issue.author.login,
                          'From' => 'aaa@aaa.aa'
          redmine_headers 'Issue-Assignee' => @issue.assigned_to.login if @issue.assigned_to
          message_id @journal          
          references @issue
          @journal_details = journal.visible_details
          @issue_url = url_for(:controller => 'issues', :action => 'show', :id => @issue, :anchor => "change-#{@journal.id}")

          subject = "Обращение #{@issue.id}. #{@issue.subject}. Запрос дополнительной информации"
          mail :to => user, :subject => subject, :From => 'qqq@qqq.qq'
        end

但是没有成功...

headers.reverse_merge! 'X-Mailer' => 'Redmine',
            'X-Redmine-Host' => Setting.host_name,
            'X-Redmine-Site' => Setting.app_title,
            'X-Auto-Response-Suppress' => 'All',
            'Auto-Submitted' => 'auto-generated',
            'From' => Setting.mail_from,
            'List-Id' => "<#{Setting.mail_from.to_s.tr('@', '.')}>"

    
    #headers['From'] = "xxx@xxx.xx"
    
    headers.keys.each do |k|
      Rails.logger.error "--- after key: #{k} value: #{headers[k]}"
    end

    Rails.logger.error "---From: #{headers['From']}"

结果:

  [ActionMailer::DeliveryJob]   --- after key: X-Mailer value: Redmine
  [ActionMailer::DeliveryJob]   --- after key: X-Redmine-Host value: hd.rpn.gov.ru
  [ActionMailer::DeliveryJob]   --- after key: X-Redmine-Site value: Redmine
  [ActionMailer::DeliveryJob]   --- after key: X-Auto-Response-Suppress value: All
  [ActionMailer::DeliveryJob]   --- after key: Auto-Submitted value: auto-generated
  [ActionMailer::DeliveryJob]   --- after key: From value: helpdesk@hhh.hh
  [ActionMailer::DeliveryJob]   --- after key: List-Id value: <helpdesk.hhh.hh>
  [ActionMailer::DeliveryJob]   --- after key: to value: User User
  [ActionMailer::DeliveryJob]   --- after key: subject value: Обращение 131706. все пропало. Запрос дополнительной информации
  [ActionMailer::DeliveryJob]   --- after key: From value: qqq@qqq.qq
  [ActionMailer::DeliveryJob]   ---From: helpdesk@hhh.hh

标签: ruby-on-railsredmine-plugins

解决方案


推荐阅读