Chen Yangjian's Blog

Carpe diem - Seize the day

让 ActionMailer 3 使用 Gmail 发送邮件

| Comments

发送邮件的方法很简单,继承 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 的关系,不好使。

Comments