• 应将 mailer 命名为 SomethingMailer。若没有 Mailer 后缀,不能立即断定它是否为一个 mailer,也不能断定哪个视图与它有关。

  • 提供 HTML 与纯文本两份视图模版。

  • 在开发环境下应显示发信失败错误。这些错误默认是关闭的。

    1. # config/environments/development.rb
    2. config.action_mailer.raise_delivery_errors = true
  • 在开发环境下使用诸如 Mailcatcher 的本地 SMTP 服务器。

    1. # config/environments/development.rb
    2. config.action_mailer.smtp_settings = {
    3. address: 'localhost',
    4. port: 1025,
    5. # 更多设置
    6. }
  • 为域名设置默认项。

    1. # config/environments/development.rb
    2. config.action_mailer.default_url_options = { host: "#{local_ip}:3000" }
    3. # config/environments/production.rb
    4. config.action_mailer.default_url_options = { host: 'your_site.com' }
    5. # 在 mailer 类中
    6. default_url_options[:host] = 'your_site.com'
  • 若需要在邮件中添加到网站的超链接,应总是使用 _url 方法,而非
    _path 方法。_url 方法产生的超链接包含域名,而 _path
    方法产生相对链接。

    1. # 差
    2. You can always find more info about this course
    3. <%= link_to 'here', course_path(@course) %>
    4. # 好
    5. You can always find more info about this course
    6. <%= link_to 'here', course_url(@course) %>
  • 正确地设置寄件人与收件人地址的格式。应使用下列格式:

    1. # 在你的 mailer 类中
    2. default from: 'Your Name <info@your_site.com>'
  • 确保测试环境下的 email 发送方法设置为 test

    1. # config/environments/test.rb
    2. config.action_mailer.delivery_method = :test
  • 开发环境和生产环境下的发送方法应设置为 smtp

    1. # config/environments/development.rb, config/environments/production.rb
    2. config.action_mailer.delivery_method = :smtp
  • 当发送 HTML 邮件时,所有样式应为行内样式,这是因为某些客户端不能正确显示外部样式。然而,这使得邮件难以维护理并会导致代码重复。有两个类似的 gem 可以转换样式,并将样式放在对应的 html 标签里: premailer-rails3roadie

  • 避免在产生页面响应的同时发送邮件。若有多个邮件需要发送,这会导致页面加载延迟甚至请求超时。有鉴于此,应使用 sidekiq 这个 gem 在后台发送邮件。