浏览 11571 次
精华帖 (0) :: 良好帖 (6) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-11-29
使用ActionMailer的smtp发送电子邮件的一个基本要领就是要使用本地的smtp服务器,否则就无法发送成功(我目前的理解是这样)。在Windows下,我测试了一下,WebMail还是比较好用的。当然,你也可以使用msmtp这种工具来使用远程的mail服务器,比如gmail,这个我在后面讲到。 最开始的时候,按照《Agile Web Develepment with Rails》这本书上面进行配置,所有的可能都试过了,163的邮箱、学校的邮箱都试过了,就是不行。出现的状况是发送半天说发送成功,但是实际上根本没有收到邮件。网上翻来覆去的找啊,基本上所有关于Rails发送邮件的资料都扫了一眼,测试多次也不行。心想,这就奇了怪了。对了,忘了说了,我一直是在windows下开发,因为服务器是windows 2003的系统,所以一直在windows下写,免得到时候出这样那样的问题。 后来实在没有办法,把ActionMailer的源码翻出来看,终于发现问题的所在。我们使用ActionMailer的时候是这么用的: ruby 代码
而调用的时候是调用Notifier.deliver_test这么来调用,而在ActionMailer里面,是调用的perform_delivery_smtp(mail)这个方法 ruby 代码
可以看到,这个方法里面调用的是Net::SMTP包里面的方法,于是我又打开Net::SMTP这个类,结果发现这个类在一开始就说: ruby 代码
也就是说只能访问local的smtp服务器。我不知道ActionMailer在后面的版本里面是否注意到这个问题,但是1.12里面一直有这个问题。 接下来问题就好解决了,有两种解决方案,一种是在本机装一个smtp服务器,我试了一下,WinWebMail还不错,比较容易配置和管理:) 另外一种解决方法就是使用msmtp,因为自己配Mail服务器有时候会被当成垃圾邮件,于是准备就使用Gmail来发信。说一下我的配置: msmtp放在d:盘根目录下面,它的配置文件.msmtprc也放在那个目录下面,内容为: account gmail host smtp.gmail.com auth on user mygmail@gmail.com password mypasswd tls on tls_starttls on from mygmail@gmail.com maildomain gmail.com account default : gmail 有的时候需要在里面加上一句port 587,我遇见的情况是在我的Windows XP上需要加,而在Windows 2003上不需要。 接下来,在environment.rb的config那段代码里面加入 ruby 代码
然后就可以使用gmail发信了,至于发送邮件的代码,请参考《Agile。。。》以及wiki.rubyonrails.org。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-12-01
我用的也是 win2003 ,可是运行却得到下面错误:
Errno::EACCES in UsersController#createPermission denied - d:\msmtp -t -C d:\.msmtprc -a gmail -- |
|
返回顶楼 | |
发表时间:2006-12-01
我没有遇到过这种情况,不清楚你这个是没有权限访问msmtp还是controller里面的问题。
我是直接下载msmtp的包,然后把WinXP or newer那个里面的msmtp.exe扔到D:就好了,然后就可以访问了。 我猜想可能有几个原因,一个是controller里面的权限问题,一个是操作系统的权限问题(你是用什么用户运行的服务器?) |
|
返回顶楼 | |
发表时间:2006-12-01
这回行了,谢谢。上次错的原因有两个,一是没有下载win32版本的msmtp,二是路径写错了。不过ror的提示也很有意思,它不说没有找到文件,而是说限制访问,让我以超级用户的身份对目录忙活了半天。
|
|
返回顶楼 | |
发表时间:2007-05-25
搂主好,我有个问题,我用的是msmtp的方式,是在linux下,我的路径是
IO.popen("/usr/local/msmtp/bin/msmtp -t -C /usr/local/msmtp/bin/.msmtprc -a gmail --", "w") do |sm| 点了发送按钮一会发送成功,一会就报错,不知道什么原因。信件是收不到。我也是连的gmail,配置就是把楼主上面的msmtp配置改了下用户名和密码。希望帮我解决一下,谢谢了。 Errno::EPIPE in Send emailController#sendemail Broken pipe RAILS_ROOT: script/../config/.. Application Trace | Framework Trace | Full Trace config/environment.rb:77:in `write' config/environment.rb:77:in `puts' config/environment.rb:77:in `perform_delivery_msmtp' config/environment.rb:76:in `popen' config/environment.rb:76:in `perform_delivery_msmtp' app/controllers/send_email_controller.rb:15:in `sendemail' -e:4:in `load' -e:4 |
|
返回顶楼 | |
发表时间:2007-05-27
这几天比较忙,呵呵
看你的错误好像是跟linux的管道机制有关吧,这方面我也不熟哦。另外,你都在linux下了,为什么不配一个sendmail呢?还要用gmail这么麻烦的方式? |
|
返回顶楼 | |
发表时间:2007-05-27
blackanger 写道 搂主好,我有个问题,我用的是msmtp的方式,是在linux下,我的路径是
IO.popen("/usr/local/msmtp/bin/msmtp -t -C /usr/local/msmtp/bin/.msmtprc -a gmail --", "w") do |sm| 点了发送按钮一会发送成功,一会就报错,不知道什么原因。信件是收不到。我也是连的gmail,配置就是把楼主上面的msmtp配置改了下用户名和密码。希望帮我解决一下,谢谢了。 Errno::EPIPE in Send emailController#sendemail Broken pipe RAILS_ROOT: script/../config/.. Application Trace | Framework Trace | Full Trace config/environment.rb:77:in `write' config/environment.rb:77:in `puts' config/environment.rb:77:in `perform_delivery_msmtp' config/environment.rb:76:in `popen' config/environment.rb:76:in `perform_delivery_msmtp' app/controllers/send_email_controller.rb:15:in `sendemail' -e:4:in `load' -e:4 gmail的smtp是带ssl身份认证的,缺省的ActionMailer只能做文本身份认证,ssl的smtp都用不成。 有一个插件可以让ActionMailer支持ssl。看看CruiseControl.rb就知道怎么用了。 |
|
返回顶楼 | |
发表时间:2007-05-27
引用 gmail的smtp是带ssl身份认证的,缺省的ActionMailer只能做文本身份认证,ssl的smtp都用不成。
有一个插件可以让ActionMailer支持ssl。看看CruiseControl.rb就知道怎么用了。 对啊,msmtp是支持的啊,我的Xp是这么设置的 account gmail host smtp.gmail.com auth on user XXXx@gmail.com password XXXXX tls on port 587 tls_starttls on from XXXx@gmail.com maildomain gmail.com account default : gmail |
|
返回顶楼 | |
发表时间:2007-05-28
我也是那么设置的啊。。。
|
|
返回顶楼 | |
发表时间:2007-05-28
引用 gmail的smtp是带ssl身份认证的,缺省的ActionMailer只能做文本身份认证,ssl的smtp都用不成。
有一个插件可以让ActionMailer支持ssl。看看CruiseControl.rb就知道怎么用了。 多谢。。。 |
|
返回顶楼 | |