PostMarkメーラーを使用してパスワードリセットメールを送信するようにDeviseをカスタマイズするにはどうすればよいですか?
PostMarkApp を使用し、Rails gems( postmark-Rails 、 postmark-gem 、および mail )購入の領収書の送信を処理するメーラーを正常に作成しましたが、パスワードを忘れた場合のメールを受信できませんでした。ログには、Deviseがメッセージを送信したが、受信トレイに電子メールが受信されず、PostMarkクレジットが減らされていないことが示されています。
Deviseのメーラーが私の消印アカウントを介して送信するための最良または最も簡単な方法は何ですか?
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を拡張させ、config/initializers/devise.rb
内のメーラーとしてNotifierを使用するようにDeviseを指定することで解決しました。
config/initializers/devise.rbからのスニペット
# Configure the class responsible to send e-mails.
config.mailer = "Notifier"
My Notifier Mailer now
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
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
メールテンプレートをapp/views/devise/mailer /からapp/views/user_mailer /に移動します
mv app/views/devise/mailer/* app/views/user_mailer/
消印ヘッダーにも「タグ」を指定する場合は、メーラーでこれを行う必要があります。
# 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
また、考案用のビューを生成し、メールテンプレートをメーラーの適切な場所にコピーする必要がありました。このようなもの -
Rails generate devise:views
cp app/views/devise/mailer/* app/views/notification_mailer/