Welcome to SpiceShop Theme

Sea summo mazim ex, ea errem eleifend definitionem vim. Ut nec hinc dolor possim mei ludus efficiendi ei sea summo mazim ex.

ROR发送邮件

ROR发送邮件

用ROR (Ruby On Rails)发送邮件是一个老话题,但是Google一下,会发现很多人都在抱怨无法发送出去,我自己也经历过类似的情况.

官方给出了一篇文档,即How To Send Email With ActionMailer.遗憾的是仍然有很多人说根据该文档配置之后还是发不出去.我也是参考了该文档,最后成功了.总结一下,如果不成功,很有可能是配置的问题.

ROR是利用ActionMailer来发送的,而且内部采用Tmail.先看看我的配置:

代码
  1. # Include your application configuration below  
  2. ActionMailer::Base.perform_deliveries = true  
  3. ActionMailer::Base.raise_delivery_errors = true  
  4. ActionMailer::Base.default_charset = "utf-8"  
  5. ActionMailer::Base.server_settings = {  
  6.     :address => "mail.xxxx.com",  
  7.     :port => 25,  
  8.     :domain => "www.xxxx.com",  
  9.     :user_name => "admin@xxxx.com",  
  10.     :password => "password",  
  11.     :authentication => :login  
  12.     }  

以上配置非常简单,无非就是配置了邮件服务器的状况,注意一下认证方式就可以了.

根据以上的配置,是可以发送的,也就是官方给的文档关于SMTP是没有错的.

如果按照上面的还是不能发送,首先检查一下是否正确配置改文件.另外检查一下发送人,即from是否正确?何谓正确?邮件地址的域名不要是localhost,例如admin@localhost.com 是不正确的.也正因为此,我自己就吃了一点亏,因为使用http://localhost:3000 来测试的,而from地址优势根据该URI来判断的.

至于带有TLS或认证的,参考官方文档的Sending emails with TLS and/or authentication-only SMTP servers这一部分,据目前了解的情况看,有人成功发送.

其实就是这么简单,只不过出现一点状况,会令人头痛,幸好Rails提供了源代码.

令人欣慰的是,如果你的Rails程序部署在Linux/Unix系统上,而且已经安装了sendmail,只需要将邮件的delivery方式设置为sendmail即可。最后摘录rails的sendmail代码:

ruby 代码
 
  1. def perform_delivery_sendmail(mail)  
  2.        IO.popen("#{sendmail_settings[:location]} #{sendmail_settings[:arguments]}","w+"do |sm|  
  3.          sm.print(mail.encoded.gsub(/\r/, ))  
  4.          sm.flush  
  5.        end  
  6.     end  

 

 

张太国

1 comment so far

wxianfeng Posted on3:33 pm - 11/18/2009

新版本应该是 smtp_settings

Comments are closed.

Comments are closed.