注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

网站开发,php,.net,App接口

深圳网站建设 Linux运维

 
 
 

日志

 
 

bugzilla不能发邮件,让bugzilla使用第三方SMTP发邮件  

2009-02-25 11:40:35|  分类: 交流 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
让bugzilla使用第三方SMTP发邮件
目前最新的bugzilla版本是2.22.2,看到有很多人搜索bugzilla的邮件问题到这篇文章,不过这篇文章的bugzilla版本是2.20.1,新版本中一些设置方式已经发生了变化。
2.22.2版本的设置更加简单,只需要修改一个文件就可以了。:),而且在这个版本中,Bugzilla_DIR/defparams.pl这个文件已经找不到,不知道跑到哪里去了,反正咱们也不用它,不管它了。
具体做法:
一、安装好bugzilla(具体如何安装,见其他相关文档)
二、修改$Bugzilla_DIR/Bugzilla/BugMail.pm,做如下修改:
1、在文件头部(不是文件的最上部)加入对Base64包引用:
use Bugzilla::Config qw(:DEFAULT $datadir);
use Bugzilla::Util;
use MIME::Base64;
use Date::Parse;
use Date::Format;
黑体部分就是增加的文字;
2、增加新的邮件发送方法:
sub MessageToMTA {
     my ($msg) = (@_);
     return if (Param('mail_delivery_method') eq "none");
     my ($header, $body) = $msg =~ /(.*?\n)\n(.*)/s ? ($1, $2) : ('', $msg);
     my $headers;
     if (Param('utf8') and (!is_7bit_clean($header) or !is_7bit_clean($body))) {
         ($headers, $body) = encode_message($msg);
     } else {
         my @header_lines = split(/\n/, $header);
         $headers = new Mail::Header \@header_lines, Modify => 0;
     }
     # Use trim to remove any whitespace (incl. newlines)
     my $rcpt_to = trim($headers->get('to'));
     use Net::SMTP;
     my $smtp_server = 'mx.hit.edu.cn';
     my $smtp_user = 'hdpan@hit.edu.cn';
     my $smtp_pass = 'xxxxxx';

     my $encode_smtpuser = trim(encode_base64($smtp_user));
     my $encode_smtppass = trim(encode_base64($smtp_pass));
     my $smtp = Net::SMTP->new($smtp_server,Timeout => 60) ||
     die 'Cannot connect to smtp server';
     my $result = $smtp->command('AUTH','LOGIN');
     my $answer = $smtp->getline();
     # 334 VXNlcm5hbWU6
     $result = $smtp->command($encode_smtpuser);
     $answer = $smtp->getline();
     # 334 UGFzc3dvcmQ6
  
     $result = $smtp->command($encode_smtppass);
     $answer = $smtp->getline();
     # 235 Authentication successful 
     # or 535 Authentication failed
     if ($answer =~ /535/i)
     {print "Sorry,Authentication failed!n";exit;}
     $smtp->mail($smtp_user);
     $smtp->to($rcpt_to);
     $smtp->data();
     $smtp->datasend($msg);
     $smtp->dataend();
     $smtp->quit;
}
这个方法与原来的方法重名,所以需要将原来的方法注释掉或者修改成另外一个名字,这样就能使用这个新的方法发送邮件了。
注意黑体部分,将他们替换成你自己的相应的数值。这是将所需参数写死在这里,就不能在配置界面进行配置了,如果需要再次修改这些参数,需要直接修改这个文件。而设置界面中的关于邮件发送方式的设置(sendmail/smtp/qmail..等)将不起作用了。
三、OVER。
另:如果在邮件发送过程中出现535错误,表示smtp服务器有问题,需要通过telnet的方式测试一下smtp是否工作正常,测试方法可以参考这个地址: http://search.csdn.net/c/blog.csdn.net/cjjky/archive/2007/02/23/1513083.aspx
Update:原来的发送邮件的接口修改了接口参数,可能会导致其他模块调用MessageToMTA时出错,于是重新修改了文中的方法,目前上面的就是最新的版本。
  评论这张
 
阅读(699)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017