我正在尝试使用rails action mailer生成邮件,但似乎并没有完全正确地完成所有操作:
这是我创建邮件的地方:
class UserNotifier < ActionMailer::Base
default from: 'mail@mail.com'
def forgot_password(user)
setup_email(user)
@subject += "Password restoration"
@url = url_for :controller => 'user_session', :action => 'reset_password',
:id => user.pw_reset_code, :only_path => true
end
protected
def setup_email(user)
@subject = "[MY APP] "
@sent_on = Time.now
@user = user
@content_type = "text/html"
mail to: user.email
end
end
这是包含邮件的html.erb
。
<%= @user.name %>,
<br/><br/>
Restore password:
<%= @url %>
然而,邮件的主题并不是我说的应该是。
但最重要的是,@url
中nil
为html.erb
,但在forgot_password
中生成正确,我对其进行了测试。
为什么nil
?我该怎么做才能呈现URL?
答案 0 :(得分:0)
该行
mail to: user.email
实际上是导致您的电子邮件发送。
因为你在setup_email中调用了这个,所以你实际上是在发送电子邮件,然后在发送后尝试更改主题和URL。
如果您忽略了一秒钟的设置方法,那么您的代码将按照您当前的顺序显示:
@subject = "[MY APP] "
@sent_on = Time.now
@user = user
@content_type = "text/html"
mail to: user.email << MAIL IS SENT HERE
@subject += "Password restoration"
@url = url_for :controller => 'user_session', :action => 'reset_password',
:id => user.pw_reset_code, :only_path => true
更新您的代码以最后调用mail命令,例如:
def forgot_password(user)
setup_email(user)
@subject += "Password restoration"
@url = url_for :controller => 'user_session', :action => 'reset_password',
:id => user.pw_reset_code, :only_path => true
mail to: user.email
end
protected
def setup_email(user)
@subject = "[MY APP] "
@sent_on = Time.now
@user = user
@content_type = "text/html"
end
答案 1 :(得分:0)
在 ActionMailer :: Base 对象上调用传递方法时会发送邮件。
您的方法 forgot_password 不会返回此对象
行 mail(to:.....)应该是forgot_password例程中的最后一行
运行 rails console 并输入此内容以查看返回的内容
ActionMailer::Base::mail(to: 'example.com', subject: 'hello')
然后在其上调用#发送。