Sendgrid 是否需要邮件 gem 以及如何使用 action mailer 进行设置?

Does Sendgrid require mail gem and how to set it up with action mailer?

Heroku 文档说: https://devcenter.heroku.com/articles/sendgrid#ruby-rails

To send out emails through SendGrid, you need to configure the Mail class to have the correct values:
require 'mail'

Mail.defaults do
  delivery_method :smtp, {
    :address => 'smtp.sendgrid.net',
    :port => '587',
    :domain => 'heroku.com',
    :user_name => ENV['SENDGRID_USERNAME'],
    :password => ENV['SENDGRID_PASSWORD'],
    :authentication => :plain,
    :enable_starttls_auto => true
  }
end

Mail gem 文档或 heroku 都没有明确指定 Mail class 应该在哪里以及如何配置它。

以前我用过类似这样的 Action Mailer

class UserMailer < ActionMailer::Base
  default from: 'careerswitch.me@gmail.com'

  # Subject can be set in your I18n file at config/locales/en.yml
  # with the following lookup:
  #
  #   en.user_mailer.signup_confirmation.subject

  def signup_confirmation(user,subject_param='Welcome!')
    @user = user

    mail to: user.email,
         subject: subject_param  do |format|
         #format.text {render __method__}
         format.html {render __method__}
    end
  end

end

关于更改内容以及如何在 Herouku/Rails4.1 上设置 sendgrid 的任何好示例?

这些是初始化程序设置。 应该 是一个生成器,但我认为没有。至少上次我手动做了。

  1. 转到yourappdirectory/config/initializers

  2. 创建一个名为 mail.rb

  3. 的文件
  4. 粘贴上面的代码

就是这样。一旦你配置好了,你就可以开始了。

Heroku 为 sendgrid 提供附加组件。 https://elements.heroku.com/addons/sendgrid

通过添加这个,它会自动为你设置环境变量,即 SENDGRID_USERNAME SENDGRID_PASSWORD

配置附加组件后,您必须将其放入 production.rb

ActionMailer::Base.smtp_settings = {
 :user_name => ENV['SENDGRID_USERNAME'],
 :password => ENV['SENDGRID_PASSWORD'],
 :domain => 'appname.herokuapp.com',
 :address => "smtp.sendgrid.net",
 :port => 587,
 :authentication => :plain,
 :enable_starttls_auto => true
}

Mailer class 将保持正常使用。