我正在使用Rails 3并实现电子邮件发送功能。我不确定我的配置是否正确,但这是我的代码:
寄件人/ user_mailer.rb
class UserMailer < ActionMailer::Base
default :from => "user@gmail.com"
def send_to(user)
@user = user
subject='welcome !'
mail(:to=>'y.lan@gmail.com', :subject=>subject, :content_type => "text/html")
mail.deliver
end
end
控制器:
def CarsController < BaseController
...
def register_finish
UserMailer.send_to(user)
end
end
配置/ enviroment.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
:address => "smtp.googlemail.com",
:port => 532,
:arguments => '-i'
:enable_starttls_auto => true
}
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
当我的控制器调用'register_finish'函数并尝试向用户发送电子邮件时,我总是得到超时::错误(执行过期)错误消息,可能是什么原因?
我看到有人在 config / initializers / setup_email.rb 中定义配置并使用
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = { ...}
我在 config / enviroment.rb 中配置它并使用:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {...}
我还看到有些人在“UserMailer”中调用它时在控制器内调用“deliver”方法。
我的问题:
我的实施与我从互联网上找到的上述不同实施方式之间有什么区别。
为什么我出现超时错误?
答案 0 :(得分:4)
我也使用gmail作为我的smtp服务器,我将setup_email.rb加到包含此代码的initiliazers
ActionMailer::Base.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:domain => "domain.pl",
:user_name => "username",
:password => "password",
:authentication => "plain",
:enable_starttls_auto => true
}
它适用于我:)
修改
我刚刚注意到我们正在使用不同的服务器,也许可以尝试使用我的配置?
答案 1 :(得分:2)
超时错误意味着存在一些身份验证错误。
不再需要此行:
ActionMailer::Base.delivery_method = :smtp
虽然建议在初始化程序中设置smtp_settings。
如果您在开发计算机上使用它,则此配置应与gmail一起使用:
ActionMailer::Base.smtp_settings = {
:enable_starttls_auto => true,
:address => 'smtp.gmail.com',
:port => 587,
:domain => 'your_domain',
:authentication => :plain,
:user_name => 'your_gmail_username',
:password => 'your_gmail_password'
}
修改
您可以为开发机器添加:
ActionMailer::Base.default_url_options[:host] = "localhost:3000"
答案 2 :(得分:0)