ZT文萃

          本博不原創(chuàng),轉(zhuǎn)帖自己感興趣那些事人物,什么入眼貼什么,隨心所欲。
          posts - 93, comments - 5, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          讓bugzilla使用SMTP發(fā)郵件

          Posted on 2013-09-27 14:19 ZT文萃 閱讀(707) 評論(0)  編輯  收藏
          From
          http://blog.chinaunix.net/uid-209416-id-2410724.html


          本文源于http://cranesss.gjjblog.com/archives/884277/

          但原文有錯誤,并且密碼為明文不安全,對其做了修改,適用版本:2.25,主要方法是修改BugMail.pm并做SMTP的測試,請確保你的server能夠連通smtp郵件服務(wù)器

          具體做法:
          一、安裝好bugzilla(具體如何安裝,見其他相關(guān)文檔)

          二,測試第三方郵件服務(wù)器SMTP發(fā)送郵件:

          具體方法是,使用telnet,以smtp.163.com為例,其他請參考以下鏈接:

          http://search.csdn.net/c/blog.csdn.net/cjjky/archive/2007/02/23/1513083.aspx

          假設(shè)帳號是test@163.com,密碼為test,

          1)root下使用perl -MMIME::Base64 -e 'print encode_base64("test")',把test換成實際的用戶名或密碼,記下返回的字串(這里是dGVzdA==),不同的smtp server,有的要求用戶名是@前的(比如test),有的要求是全部(如test@163.com),可以參考郵件提供商關(guān)于outlook等smtp客戶端的設(shè)置.

          2) telnet smtp.163.com 25 #25為163郵箱的smtp服務(wù)端口

               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:<test@163.com>         # FROM選項,<>里的必須是現(xiàn)在用的郵件名

          250 Mail OK

          RCPT TO:<test@163.com>               #TO 選項,發(fā)給誰

          250 Mail OK

          DATA                                                     #準(zhǔn)備填充郵件體

          354 End data with <CR><LF>.<CR><LF>    #<回車>.<回車>結(jié)束

          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,做如下修改:

          增加新的郵件發(fā)送方法:

          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 = 'test@163.com'; #這里用戶名是全的



               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;
          }

          這個方法與原來的方法重名,所以需要將原來的方法注釋掉或者修改成另外一個名字,這樣就能使用這個新的方法發(fā)送郵件了。

          注意黑體部分,將他們替換成你自己的相應(yīng)的數(shù)值。這是將所需參數(shù)寫死在這里,就不能在配置界面進行配置了,如果需要再次修改這些參數(shù),需要直接修改這個文件。而設(shè)置界面中的關(guān)于郵件發(fā)送方式的設(shè)置(sendmail/smtp/qmail..等)將不起作用了。

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 玉溪市| 宕昌县| 南丰县| 阿勒泰市| 永兴县| 伽师县| 海原县| 册亨县| 大余县| 驻马店市| 本溪市| 临夏市| 开原市| 马鞍山市| 贡觉县| 承德县| 平江县| 于田县| 奎屯市| 抚松县| 古田县| 江门市| 罗山县| 栖霞市| 南通市| 浙江省| 清水河县| 如东县| 丰宁| 扶绥县| 当涂县| 成安县| 西昌市| 宿松县| 麻阳| 抚顺县| 勃利县| 太保市| 上栗县| 崇州市| 木兰县|