使用Devise和Gmail SMTP服务器发送邮件

21

我正在使用Devise的:confirmable和:recoverable模块来确认用户并允许他恢复密码。一切都进行得很顺利,邮件已经生成并且我可以在服务器日志中看到它,但是之后我遇到了错误,邮件没有被送到邮箱里。 我的environment.rb文件中的SMTP设置为:

require 'tlsmail'
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.delivery_method = :smtp

ActionMailer::Base.smtp_settings = {
  :enable_starttls_auto => true,  #this is the important shit!
  :address => 'smtp.gmail.com', #'localhost', 
  :port => 587,
  :tls => true,
  :domain => 'mail.google.com',  # mail.customdomain.com if you use google apps
  :authentication => :login,
  :user_name => 'jatinkumar.nitk@gmail.com',
  :password => '_secret_password'
} 
如果 :address 是 'smtp.gmail.com',那么我会得到以下错误:
SocketError (getaddrinfo: Name or service not known):

如果我将 :address 设置为 'localhost',那么我会收到以下错误:

Errno::ECONNREFUSED Connection refused - connect(2)

我不知道这个 :address 的含义,对于这些东西我是个新手。运行 uname -a 后,我得到的结果是:

Linux jatin-ubuntu 2.6.32-24-generic #38-Ubuntu SMP Mon Jul 5 09:22:14 UTC 2010 i686 GNU/Linux

我在/etc/hosts文件中的条目如下:

127.0.0.1   localhost
127.0.1.1   jatin-ubuntu

*#74.125.93.109   smtp.gmail.com 
#The above entry added by me*

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

当我在/etc/hosts文件中取消注释'smtp.gmail.com'地址时,以下错误消息消失了:

SocketError (getaddrinfo: Name or service not known):

现在的错误是:

Errno::ECONNREFUSED Connection refused - connect(2)

我不知道出了什么问题,已经搜索了错误并尝试了一切,但没有任何救援措施。 我安装了'tlsmail' gem和'mail' gem,并且我的应用程序处于开发模式。 请帮助我修复这个错误,这样我就可以愉快地继续我的Rails之旅,如果可能的话,请指导我正确处理这个地址问题,以便我理解其基础知识。 提前致谢

2个回答

24

如果你仍然遇到问题,请尝试使用以下设置:

require 'tlsmail'    
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)

ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.perform_deliveries = true
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.smtp_settings = {
  :enable_starttls_auto => true,  
  :address            => 'smtp.gmail.com',
  :port               => 587,
  :tls                  => true,
  :domain             => 'gmail.com', #you can also use google.com
  :authentication     => :plain,
  :user_name          => 'jatinkumar.nitk@gmail.com',
  :password           => '_secret_password'
}

另外我建议将这些设置放在您的config/environments/development.rb文件中,而不是environment.rb文件中,这样您可以为每个环境指定不同的邮件服务器。


谢谢,真的很有效。如果我有自己的域名和用户名,你能否也写下设置? - Jatin Ganhotra
只需将域更改为您的域,将user_name更改为jatinkumar.nitk@yourdomain.com... 其他所有内容都应保持不变。 - Braden Becker
使用这个设置,它会从jatinkumar.nitk@gmail.com发送电子邮件到任何邮寄地址吗? - shibly
1
显然,:domain可选的,但从文档中并不知道这一点。 - Jared Beck
з»ҸиҝҮж•°е°Ҹж—¶зҡ„и°ғиҜ•зҘһз§ҳзҡ„OpenSSL::SSL::SSLErrorй”ҷиҜҜпјҢиҝҷжҳҜе”ҜдёҖжңҖз»Ҳи§ЈеҶій—®йўҳзҡ„ж–№жі•пјҒ - Noz

0

1
@Rio Tera:我是一个新手,对这些东西一无所知,所以无法理解你给我的指导。你能详细说明一下吗? - Jatin Ganhotra
域名应该是您的域名“example.com”。 - riotera
:domain => "gmail.com", :username => "jatinkumar.nitk", :authentication => :plain - riotera
@Rio tera:我尝试了你说的“gmail.com”和其他的东西...没有用。 - Jatin Ganhotra
我最后一次帮助你的机会:将“:domain”设置为您的IP服务器。 - riotera
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接