在自定义设计邮件程序中生成确认URL

时间:2014-11-08 20:44:28

标签: ruby-on-rails ruby-on-rails-4 devise mandrill

由于各种原因,我使用Mandrill API来处理我的交易电子邮件。我遇到的一个问题是在新邮件程序中生成confirmation_url,edit_password_url和unlock_url。我在新的邮件程序中包含Devise的URL帮助程序。正确生成电子邮件中的其他所有内容。

我收到以下错误:

NoMethodError (undefined method `main_app' for #<DeviseMailer:0x007f812b6abe78>):
  app/mailers/devise_mailer.rb:15:in `confirmation_instructions'
  app/controllers/lenders/registrations_controller.rb:9:in `create'

devise_mailer.rb

class DeviseMailer < MandrillMailer::TemplateMailer
  helper :application
  include Devise::Controllers::UrlHelpers

  default from: 'no-reply@test.com'

  def confirmation_instructions(record, token)
    mandrill_mail template: 'Confirmation Instructions',
                  subject:  'Confirm Email',
                  from_name: 'Test',
                  to: { email: record.email },
                  vars: {
                    'FNAME'                  => record.first_name,
                    'LIST_COMPANY'           => "Apples",
                    'HTML_LIST_ADDRESS_HTML' => "1 Infinite Loop",
                    'CONFIRMATION_LINK'      => confirmation_url(record, :confirmation_token => token)
                  }
  end
end

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

对于遇到此问题的任何人 - 在使用mandrill_mailer替换devise的客户邮件时,我遇到了同样的问题。

使用上面的例子,我就这样修好了

class DeviseMailer < MandrillMailer::TemplateMaile

    # ..... mailer code in here here .....

    private

    def main_app
      Rails.application.routes.default_url_options[:host] = Rails.application.routes.default_url_options[:host]
      Rails.application.routes.url_helpers
    end

end