Hostmonster上配置redmine的邮件发送功能

    之前已经成功在Hostmonster上配置redmine了,还有一个重要功能没有配置上:redmine的发送邮件通知的功能。但配置路途曲折迂回,经过两周的辗转、反复查资料和尝试,总算还是配置成功了,配完后脑中就只晃一句话:道路是曲折的,前途是光明的(遇到问题不要放弃,多查多想多尝试)。回头看看结果和过程中学到的一些排查问题的技巧。

 

先说结果,在Hostmonster上配置redmine的邮件发送功能的配置很简单,下面是config/email.yml配置的例子:

production:

 delivery_method: :smtp

 smtp_settings:

   address: 'mail.your-hostmonster-domain-name.com'

   port: 25

   domain: 'your-hostmonster-domain-name.com'

   authentication: :plain

   user_name: "[email protected]"

password:"mail-password"

说明:(1) 先到Hostmonster的控制面板上的“电子邮件帐户”中创建一个邮件用户,用户名对应上面的“mail-user-name”,@符号后面的域名对应“your-hostmonster-domain-name.com”,密码对应“mail-password”;

(2) 从redmine的源码看“domain”这一项基本没有用,但也照样配置上吧;

(3) 端口使用25,从网上资料看26也行(不过这里没有尝试,如果25不行的话,可以试一下26);

(4) “address”的配置是以“mail.xxxx.com”形式出现的,与一般的“smtp.xxx.com”是有区别的;

(5) 这个配置的环境是:ruby(1.8.7)、rails(2.3.5),如果是这个环境(或以上),不需要其它插件之类的,只需要配置config/email.yml。

(6) 参考:http://www.redmine.org/wiki/redmine/EmailConfiguration

 

过程

由于日常用gmail比较多,为了减少发的邮件被当垃圾处理,所以想使用gmail的smtp服务器的形式代发邮件(这样redmine发出的邮件看起来好像是由gmail发出的)。但这个想法是“灾难”的开始,结果是额外学了不少东西,代价是花了不少时间。

(1)   按http://www.redmine.org/wiki/redmine/EmailConfiguration中介绍的“GMail/GoogleApps and other TLS-requiring SMTP servers”部分,配置了config/email.yml,然后登陆到redmine里的email notification里点击“send test mail”,无论怎样修改配置,都雷打不动地提示:

"Thefollowing error occured while sending email notification: /"executionexpired/".

(2)   第一种尝试:到baidu、google搜索,查到了不计其数的文章,有很多人都问了同样的问题,后面也给了答复,但email.yml的配置与“EmailConfiguration”里的差不多,该注意的端口、tls、enable_starttls_auto等,“EmailConfiguration”里的标配都有。唯一不同的是有的说要插件“action_mailer_optional_tls”或者直接把插件内容放到lib中然后修改emvironment.rb;分别试了上面两种方式,加上email.yml中各个“可疑”参数的排列组合后进行一系列的尝试工,提示还是犹如“磐石”般泰然处之,但我却黔驴技穷了。(当然,如果email.yml参数中的用户名、密码错了,提示是验证错误之类的)

(3)   第二种尝试:“execution expired”这种提示实在是让人摸不着头脑(没什么提示的信息量),从而也反省一下自己以后写程序时提示得人性化一些。没办法,从提示看不出什么,只能从代码下手了(还好rails全是能看到源码的),回头温习了一下rails的发邮件例子,了解到一个重要的信息:ruby(1.8.7)、rails(2.3.x)上已经集成tls功能了,不需要加什么插件之类的。于是,把redmine重新安装一遍,不带“action_mailer_optional_tls”插件,也不要把与这插件类似的功能加到lib和emvironment.rb里,然后再详细配置好email.yml,不过可惜的是,结果还是跟之前一样糟糕。

(4)   第三种尝试:使用redmine发不成邮件,那先自己发一个试试呗。于是在一linux机器上装了ruby和rails,然后写了个发邮件的test程序(参考:http://edgeguides.rubyonrails.org/action_mailer_basics.html),然后把下面配置放到environment.rb的最后:

ActionMailer::Base.smtp_settings= {

  :enable_starttls_auto => true,

  :address => "smtp.gmail.com",

  :port => 587,

  :domain => "smtp.gmail.com",

  :authentication => :plain,

  :user_name =>"[email protected]",

  :password => "mail-password"

}

程序很简单,只是发了一句话,但却顺利得很,一发一个准,gmail里全部收到。

(5)   第四种尝试:在linux本机上同样安装redmine,使用其里面自带的deliver_test(user)方法来测试(email.yml与第一种尝试一样,environment.rb不添加有关email的任何东西),也是随意都能够成功。这个过程刚开始很辛苦、很费时间,直到想起了这个方法:在命令行中先进入redmine工程,然后在命令行中输入:ruby script/console production 来加载整个production环境,然后先用user = User.try_to_login(‘username’, ‘userpassword’) 获得一个用户,然后使用Mailer.deliver_test(user)来向user发送一封邮件。有了这个方法,测试轻松多了。

(6)   经过上面尝试后,很明显问题的根源是与hostmonster有关,而不是与配置有关。发个ticket向Hostmonster咨询之后,回复是:“Unfortunately, we do notallow outbound SMTP connections as you are trying to do with this script. I'msorry for any inconvenience this may cause.”简单地理解是:Hostmonster不支持这种形式去使用外部的smtp服务器。“真相”终于大白于天下,到Hostmonster上申请一个邮箱(可以使用http://www.domain-name.com/webmail去登陆这个邮箱),然后配置到email.yml上(不需要使用tls),就一切OK了。

(7)   另外,如果遇到“550-Verification failed for [email protected]”或“535 Incorrect authentication data”一般是邮箱配置的用户名、密码不正确或者发送者邮箱的用户名和密码不正确产生的。

 

小结:

(1)   多查资料,多尝试、多学原理再多尝试;

(2)   使用ruby script/about来查看当前rails工程的版本环境;使用这个命令时,rails会试图去连接数据库,所以如果使用production环境,则需要使用命令: RAILS_ENV=production script/about

(3)   使用ruby script/console production来测试程序,使用ruby script/server webrick -e production来测试工程代码是否能够跑起来(因为启动出问题时,Hostmonster看不到详细的错误信息);

(4)   Hostmonster不支持使用外部的smtp服务器

你可能感兴趣的:(Hostmonster上配置redmine的邮件发送功能)