无法在生产环境中使用 Action Mailer 发送电子邮件

Unable to send email using Action Mailer in production

我在使用 ActionMailer 和 Gmail 发送电子邮件时遇到了一些问题。我已经尝试使用 Mandrill,但它仍然没有发送。使用 gmail 测试 ActionMailer 时,它仅在开发中有效,但在生产中似乎存在问题。

我尝试了多种解决方案,但似乎没有任何效果。我已经尝试在 environment.rb 中设置操作邮件程序设置,从 gmail 切换到 mandrill。我似乎无法弄清楚我错过了什么。

告诉我你的想法。我在下面提供了代码片段

production.rb:

config.action_mailer.default_url_options = { :host => ENV["HEROKU_DOMAIN"] }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default :charset => "utf-8"
config.action_mailer.smtp_settings = {
  address: "smtp.mandrillapp.com",
  port: 587,
  domain: ENV["HEROKU_DOMAIN"],
  authentication: "plain",
  enable_starttls_auto: true,
  user_name: ENV["HEROKU_USERNAME"],
  password: ENV["MANDRILL_KEY"]
}

email_signup.rb:

class EmailSignup < ApplicationMailer
  default from: "example@gmail.com"

  def sample_email(user)
    @user = user

    mail subject: "test", to: user.email
  end
end

users_controller.rb:

def create
  @user = User.new(user_params)

  if @user.save
    @user.save
    EmailSignup.sample_email(@user).deliver
    redirect_to thanks_path
  else
    redirect_to root_path
  end
end

试试这个配置,我认为 default_url_optionssmtp domain name 有问题。您也可以省略其他配置。

config.action_mailer.default_url_options = { host: ENV['DEFAULT_URL_OPTIONS'] }
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: 'smtp.mandrillapp.com',
  port: 587,
  domain: 'heroku.com',
  user_name: ENV['MANDRILL_USERNAME'],
  password: ENV['MANDRILL_APIKEY'],
  authentication: 'plain'
}

Your default url options should be the full domain name of your server eg. mytestapp.herokuapp.com

Neo 的解决方案解决了我的问题。

我所做的只是在 Heroku 上设置环境变量。

$ heroku config:set HEROKU_USERNAME = ...

和所有其他变量并修复它。