Как настроить Devise для отправки писем для сброса пароля с помощью почтовой программы PostMark - PullRequest
18 голосов
/ 15 апреля 2011

Я пытаюсь получить все почтовые уведомления моей системы под одним зонтиком, используя PostMarkApp и используя гемы Rails ( postmark-rails , postmark-gem и почта ). Я успешно создал почтовую программу, которая обрабатывает отправку квитанций о покупках, но я не смог получить электронные письма для забытых паролей. Мои журналы разработки показывают, что Devise отправил сообщение, но электронная почта не поступила в мой почтовый ящик, и кредиты PostMark не уменьшены.

Какой самый лучший или самый простой способ отправлять почтовые программы Devise через мою учетную запись PostMark?

Фрагмент из config / environment / development.rb

config.action_mailer.delivery_method      = :postmark
config.action_mailer.postmark_settings    = { :api_key => "VALID_API_KEY_WAS_HERE" }
config.postmark_signature                 = VALID_POSTMARK_SIGNATURE_WAS_HERE

Мой почтовик, который использует почтовый штемпель

class Notifier < ActionMailer::Base
  # set some sensible defaults
  default :from => MyApp::Application.config.postmark_signature

  def receipt_message(order)
    @order = order
    @billing_address = order.convert_billing_address_to_hash(order.billing_address)

    mail(:to => @order.user.email, :subject => "Your Order Receipt", :tag => 'order-receipt', :content_type => "text/html") do |format|
      format.html
    end
  end
end

РЕДАКТИРОВАТЬ: РЕШЕНИЕ на мой вопрос ниже

Решено это с помощью моего Notifier почтового расширения Devise :: Mailer и указания Devise для использования моего уведомителя в качестве почтового в config/initializers/devise.rb

фрагмент из config / initializers / devise.rb

# Configure the class responsible to send e-mails.
config.mailer = "Notifier"

Мой почтовый ящик для уведомлений

class Notifier < Devise::Mailer
  # set some sensible defaults
  default :from => MyApp::Application.config.postmark_signature

  # send a receipt of the Member's purchase
  def receipt_message(order)
    @order = order
    @billing_address = order.convert_billing_address_to_hash(order.billing_address)

    mail(:to => @order.user.email, :subject => "Your Order Receipt", :tag => 'order-receipt', :content_type => "text/html") do |format|
      format.html
    end
  end

  # send password reset instructions
  def reset_password_instructions(user)
     @resource = user
     mail(:to => @resource.email, :subject => "Reset password instructions", :tag => 'password-reset', :content_type => "text/html") do |format|
       format.html { render "devise/mailer/reset_password_instructions" }
     end
   end
end

Ответы [ 3 ]

20 голосов
/ 07 сентября 2011

Используя последнюю версию Devise, описанные выше методы мне не помогли.Это моё решение.

В config / application.rb:

config.action_mailer.delivery_method   = :postmark
config.action_mailer.postmark_settings = { :api_key => "your-API-key-here" }

В config / initializers / devise.rb:

config.mailer = "UserMailer" # UserMailer is my mailer class

В app / mailers /user_mailer.rb:

class UserMailer < ActionMailer::Base
  include Devise::Mailers::Helpers

  default from: "default@mydomain.com"

  def confirmation_instructions(record)
    devise_mail(record, :confirmation_instructions)
  end

  def reset_password_instructions(record)
    devise_mail(record, :reset_password_instructions)
  end

  def unlock_instructions(record)
    devise_mail(record, :unlock_instructions)
  end

  # you can then put any of your own methods here
end

Наконец, убедитесь, что вы создали собственные представления устройств

rails generate devise:views

и переместите шаблоны электронной почты из приложения / views / devise / mailer / в приложение / views/ user_mailer /

mv app/views/devise/mailer/* app/views/user_mailer/
1 голос
/ 03 декабря 2011

Если вы также хотите указать теги в заголовках почтовых штемпелей, вы должны сделать это в почтовой программе:

  # this override method is from Devise::Mailers::Helpers
  def headers_for(action)
    headers = {
      :subject        => translate(devise_mapping, action),
      :from           => mailer_sender(devise_mapping),
      :to             => resource.email,
      :template_path  => template_paths,
      :tag            => action.dasherize # specify the tag here
    }
    if resource.respond_to?(:headers_for)
      headers.merge!(resource.headers_for(action))
    end
    unless headers.key?(:reply_to)
      headers[:reply_to] = headers[:from]
    end
    headers
  end
0 голосов
/ 17 мая 2011

Мне также пришлось сгенерировать представления для устройства и скопировать почтовые шаблоны в нужное место для моей почтовой программы. Как то так -

rails generate devise:views
cp app/views/devise/mailer/* app/views/notification_mailer/
...