控制器内部:
def update
@user.update({approved: true})
UserMailer.send_approved_mail(@user)
redirect_to(root_url)
end
在user_mailer.rb中
class UserMailer < Devise::Mailer
def send_approved_mail(user)
@resource = user
email_body = render "user_activated_mail"
if @resource.valid?
client = Postmark::ApiClient.new(ENV["POSTMARK_API_KEY"])
client.deliver(from: ENV["POSTMARK_SIGNATURE"],
to: @resource.email, subject: "User Activation information.",
tag: 'account-activated', :content_type => "text/html",
html_body: email_body)
end
end
end
在rails 4.1.0中,正在调用控制器中的方法并且正在发送电子邮件,但是在rails 4.2中,控制器中的邮件程序方法没有被调用,但是当从rails控制台调用时,它可以工作。我为postmark api和配置文件做了所有必要的配置。唯一的事情是在rails 4.1.0中,控制器内部的邮件程序被调用,但是在rails 4.2中,它从rails console调用时不起作用。究竟是什么原因无法弄明白。
答案 0 :(得分:5)
您在此处注意到的行为是Rails 4.2中引入的新默认值:
随着Active Job和#deliver_later的引入......实例方法的调用(在邮件程序上)被推迟,直到调用deliver_now或deliver_later。
查看Rails 4.2 upgrade guide了解详情。
不过不用担心。您仍然可以使用Postmark与ActionMailer。 official Postmark Rails gem提供与Postmark的ActionMailer的插件集成。通过使用它,您应该能够编写邮件,就像它们是常规的Rails邮件程序一样,而无需在代码中手动管理邮戳连接。
P.S。我在Wildbit(邮戳的创作者)工作。请随时直接与我们联系。