发送邮件的方法很简单,继承 ActionMailer::Base
,实现个发送邮件的方法:
`# app/models/notifier.rb
class Notifier < ActionMailer::Base
default_url_options[:host] = "authlogic_example.binarylogic.com"
def password_reset_instructions(user)
subject "Password Reset Instructions"
from "Binary Logic Notifier "
recipients user.email
sent_on Time.now
body :edit_password_reset_url => edit_password_reset_url(user.perishable_token)
end
end
`
然后调用 Notifier.password_reset_instructions(current_user).deliver()
就可以了。以上方法来自 Ben Johnson 的 Authlogic Password Reset 教程。
看起来很容易,对吧?发送邮件背后的苦工是 ActionMailer,它会找到 Rails 所在的机器上的 sendmail,使用该服务把邮件发送出去。而当我们在本地开发的时候,机器上通常都不会有而且也懒得配置复杂的 sendmail 服务。这个时候,不妨用 gmail 来将就一下。
使用 gmail 的方法也简单,注册个 gmail 帐号,并告诉 ActionMailer 使用 SMTP 的方式发送邮件,附上 gmail 账户参数,即可。
`# config/enviroments.rb
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => 'your.host.name',
:user_name => '<username>',
:password => '<password>',
:authentication => 'plain',
:enable_starttls_auto => true
}
`</password></username>
如果还是不成,试试重启服务吧。
除此之外,还有个曲线救国的方法。我们可以告诉 ActionMailer 去找另外的邮件发送服务,再通过该服务调用 gmail 的 SMTP 方式来发送邮件。这个服务名叫 msmtp,我试了下,可能是 ActionMailer 3 的关系,不好使。