免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5062 | 回复: 0
打印 上一主题 下一主题

让bugzilla使用SMTP发邮件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-16 10:27 |只看该作者 |倒序浏览

本文源于
http://cranesss.gjjblog.com/archives/884277/
但原文有错误,并且密码为明文不安全,对其做了修改,适用版本:2.25,主要方法是修改BugMail.pm并做SMTP的测试,请确保你的server能够连通smtp邮件服务器
具体做法:
一、安装好bugzilla(具体如何安装,见其他相关文档)
二,测试第三方邮件服务器SMTP发送邮件:
具体方法是,使用telnet,以smtp.163.com为例,其他请参考以下链接:
http://search.csdn.net/c/blog.csdn.net/cjjky/archive/2007/02/23/1513083.aspx
假设帐号是test@163.com,密码为test,
1)root下使用perl -MMIME::Base64 -e 'print encode_base64("test")',把test换成实际的用户名或密码,记下返回的字串(这里是dGVzdA==),不同的smtp server,有的要求用户名是@前的(比如test),有的要求是全部(
[email=比如test@163.com]比如test@163.com[/email]
),可以参考邮件提供商关于outlook等smtp客户端的设置.
2) telnet smtp.163.com 25  #25为163邮箱的smtp服务端口
     Trying 202.108.5.83...
Connected to smtp.163.com.
Escape character is '^]'.
220 163.com Anti-spam GT for Coremail System (163com[071018])
     EHLO smtp.163.com
     250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
AUTH LOGIN
334 dXNlcm5hbWU6
dGVzdA==   #使用步聚1,得到的用户名字符串
     334 UGFzc3dvcmQ6
     dGVzdA==   #使用步聚1,得到的密码字符串
     235 Authentication successful
          MAIL FROM:         # FROM选项,里的必须是现在用的邮件名
250 Mail OK
RCPT TO:               #TO 选项,发给谁
250 Mail OK
DATA                                                     #准备填充邮件体
354 End data with .    #按回车>.回车>结束
TO: test@163.com                                       
FROM: test@163.com
SUBJECT: test by telnet/smtp

test, just a test.                                             
.                                                                       
250 Mail OK queued as smtp10,wKjADQ2ApxRnnqBE0CWaEw==.38326S3                 
NOOP                                                            
250 OK
QUIT                                                           
221 Closing connection. Good bye.
Connection closed by foreign host.
看有没有收到邮件,若测试成功,说明smtp server可以使用,记下perl生成的用户名和密码的字串,下方我称之为用户名密文,密码密文
三、修改$Bugzilla_DIR/Bugzilla/BugMail.pm,做如下修改:
增加新的邮件发送方法:
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 = 'smtp.163.com';
     my $smtp_user =
[email='test@163.com']'test@163.com'[/email]
; #这里用户名是全的

     my $encode_smtpuser ='dGVzdA=='; #用户名密文
     my $encode_smtppass = 'dGVzdA=='; #密码密文,用密文比明文enconde安全
     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..等)将不起作用了。



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/4448/showart_1194421.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP