我确信之前已经被问了一百万次,但我找不到任何适合我的东西,所以我再问一次!
我只需要在rails 3中使用ActionMailer发送电子邮件的方式。我已经按照许多教程,包括新ActionMailer上的Railscasts教程,我可以看到生成的邮件但我没有收到它们。
我尝试了许多不同的方法,但它们通常相当于配置以下设置
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "xxx@gmail.com",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
我在config / environment.rb,config / environments / development.rb中尝试了上面的代码(当然有有效的gmail详细信息),目前在自己的初始化配置/ initialisers / setup_mail.rb
我还尝试过几个不同的smtp服务器,包括Gmail和Sendgrid,相应地调整smtp设置,但仍然没有。我可以在终端和开发日志中看到邮件,就是这样。
有没有人知道我可能错过的任何其他问题,需要设置ActionMailer才能工作?如果没有这种方法可以获得有关邮件未被发送的原因的更多信息?我有
config.action_mailer.raise_delivery_errors = true
在我的config / development.rb中设置,但开发日志仍然显示与我在终端中看到的相同。
为了它的价值,我正在使用Ubuntu 10.04笔记本电脑进行开发,以防万一需要任何特定的设置。
非常感谢
答案 0 :(得分:55)
嗯,我已经解决了这个问题,但是为什么这个有效,而其他方法没有,我不知道。
解决方案是在config / initialisers / setup_mail.rb中创建包含以下内容的初始化
if Rails.env != 'test'
email_settings = YAML::load(File.open("#{Rails.root.to_s}/config/email.yml"))
ActionMailer::Base.smtp_settings = email_settings[Rails.env] unless email_settings[Rails.env].nil?
end
然后我添加了config / email.yml,其中包含开发和生产电子邮件帐户的详细信息
development:
:address: smtp.gmail.com
:port: 587
:authentication: plain
:user_name: xxx
:password: yyy
:enable_starttls_auto: true
production:
:address: smtp.gmail.com
:port: 587
:authentication: plain
:user_name: xxx
:password: yyy
:enable_starttls_auto: true
就像我说的,不知道为什么,但这似乎可以解决问题。谢谢所有指针
答案 1 :(得分:27)
我在config/environments/development.rb
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
我已放入config.actionmailer.*
的实际邮件配置config\application.rb
。
希望这会有所帮助:)
答案 2 :(得分:6)
尝试使用'sendmail'代替'smtp'。
ActionMailer::Base.delivery_method = :sendmail
ActionMailer::Base.sendmail_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "xxx@gmail.com",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
答案 3 :(得分:3)
三件事。
首先,端口是一个整数,不需要引号,如第一个示例所示。 (但我认为字符串应该仍然有用。)
其次,每次修改此(或任何)初始化程序文件时,请不要忘记重新启动服务器。这可以解释为什么在添加后没有看到错误:
config.action_mailer.raise_delivery_errors = true
如果没有该错误消息,很难确定邮件不会发生的原因,但现在却是。一种可能性是您在密码周围使用双引号。如果您使用的是强密码并且密码中的令牌未被转义,则可能会被重新解释。 (即"P@ssw\0rd"
将成为P@ssrd
)。出于这个原因,我总是在我的代码中使用单引号,除非我特别需要语法糖。
最后,enable_starttls_auto: true
是默认值且不必要。
答案 4 :(得分:1)
将所有配置放入: 配置/环境/ development.rb
我的意思是
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => "587",
:domain => "gmail.com",
:user_name => "xxx@gmail.com",
:password => "yyy",
:authentication => "plain",
:enable_starttls_auto => true
}
和
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
它对我有用。
答案 5 :(得分:1)
ActionMailer::Base.delivery_method = :sendmail
和强>
config.action_mailer.perform_deliveries = true
是让我解决这个问题的两个必要步骤
答案 6 :(得分:0)
此外,您的gmail用户名不是别名。
答案 7 :(得分:0)
我的两个便士值得:
我在Rails 5.1中遇到了完全相同的症状:没有发生任何事情,我的development.rb
文件中的设置完全被忽略了......
然后我记得重新启动机器!(这解决了这个问题)
之前的几条评论已经指出了这一点。
然而,问题很棘手,因为您不期望这种行为。在我看来,development.rb
中的默认评论在这方面具有误导性:
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# since *you don't have to restart the web server when you make code changes*.