Как настроить Devise для отправки паролей reset с помощью почтовой программы PostMark
Я пытаюсь получить все оповещения по электронной почте системы под одним зонтиком, используя PostMarkApp и используя драгоценности Rails (postmark-rails, postmark-gem и mail). Я успешно создал почтовую программу, которая обрабатывает отправку квитанций для покупок, но я не смог получить электронные письма за забытые пароли. В моих журналах разработки показано, что 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
Мой Mailer, который использует Postmark
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
EDIT: РЕШЕНИЕ к моему вопросу ниже
Решив его, если моя почтовая программа Notifier
расширяет Devise:: Mailer и указывает Devise на использование моего Notifier в качестве почтовой программы в config/initializers/devise.rb
фрагмент из config/initializers/devise.rb
# Configure the class responsible to send e-mails.
config.mailer = "Notifier"
My Notifier Mailer теперь
class Notifier < Devise::Mailer
# set some sensible defaults
default :from => MyApp::Application.config.postmark_signature
# send a receipt of the Member 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
Ответы
Ответ 1
Используя последнюю версию 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: "[email protected]"
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/в app/views/user_mailer/
mv app/views/devise/mailer/* app/views/user_mailer/
Ответ 2
Если вы также хотите указать "теги" в заголовках почтовых индексов, вы должны сделать это в своей почтовой программе:
# 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
Ответ 3
Мне также пришлось создавать представления для разработки и копировать почтовые шаблоны в нужное место для моей почтовой программы. Что-то вроде этого -
rails generate devise:views
cp app/views/devise/mailer/* app/views/notification_mailer/