我敢肯定这个问题以前已经被问了一百万次了,但是我找不到任何适合我的方法,所以我再问一遍!
我只需要一种在Rails3中使用ActionMailer发送电子邮件的方法。我已经阅读了很多教程,包括新ActionMailer上的Railscast教程,我可以看到正在生成的邮件,但我没有收到它们。
我尝试了一系列不同的方法,但它们通常相当于配置以下设置
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 ment.rb、config/environment/development.rb中尝试了上面的代码(当然包含有效的gmail详细信息),目前它在自己的initialiser config/initialisers/setup_mail.rb中
我还尝试了一些不同的smtp服务器,包括Gmail和Sendgrid,相应地调整了smtp设置,但仍然没有结果。我可以看到终端中的邮件和开发日志,仅此而已。
有没有人知道我可能错过了让ActionMailer工作所需的设置的任何其他问题?如果做不到这一点,有没有办法获得更多关于为什么邮件不被发送的信息?我有过
config.action_mailer.raise_delivery_errors = true
在我的config/development.rb中设置,但开发日志仍然显示与我在终端中看到的相同。
无论如何,我在Ubuntu 10.04笔记本电脑上进行开发,以防需要任何特定的设置。
非常感谢
发布于 2010-12-07 22:39:48
好吧,我已经解决了这个问题,但是为什么这个方法有效,而其他方法不起作用,我不知道。
解决方案是在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
就像我说的,不知道为什么,但这似乎起到了作用。感谢所有人的指点
发布于 2010-11-30 20:32:18
我在config/environments/development.rb
中有以下内容
config.action_mailer.raise_delivery_errors = true
config.action_mailer.perform_deliveries = true
实际的邮件配置,我放在config\application.rb
中的config.actionmailer.*
。
希望这能有所帮助:)
发布于 2010-11-30 20:11:33
尝试使用“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
}
https://stackoverflow.com/questions/4313177
复制相似问题