讓bugzilla使用第三方SMTP發郵件

來源:互聯網
上載者:User

目前最新的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:經Bob提醒,原來的發送郵件的介面修改了介面參數,可能會導致其他模組調用MessageToMTA時出錯,於是重新修改了文中的方法,目前上面的就是最新的版本。Thanks to Bob. --2007.03.15 16:30

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.