无法在生产环境中使用 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_options
和 smtp 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 = ...
和所有其他变量并修复它。
我在使用 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_options
和 smtp 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 = ...
和所有其他变量并修复它。