mailwatch 與 php 5.3

將Centos5的php5.1升級到5.3後mailwatch 1.04的log會出現:
Deprecated: Function ereg_replace() is deprecated in /var/www/html/mailscanner/functions.php on line 936
5.3版的php不建議繼續使用ereg_replace()函數, 可以改用preg_replace(). 改完後log還是有些其他錯誤. 拜完google後搜尋到mailwatch的mailing list這篇完整的教學
http://permalink.gmane.org/gmane.mail.virus.mailscanner.mailwatch.general/8861

按說明將所有pear模組及jpgraph升級到最新版本, 順便將之前的中文utf-8修改以及官版mailwatch 1.05的增修部份整併, 整個web目錄打包. 下載:
http://www.box.net/shared/bpe4gc8deprpem3oygrb

在〈mailwatch 與 php 5.3〉中有 10 則留言

  1. 剛好也正在測試安裝新的 php 5.3 + mailwatch
    謝謝你的修改檔案提供 , 剛下載測試網頁正常 !!

    不過 log 有跑出 jpgraph.php 這支程式有問題:
    PHP Warning: strftime(): It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function.

    將 php.ini 加上一行設定後可解決:
    date.timezone = “Asia/Taipei”

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    另請教一個問題 , 不知您有無遇過

    Mailwatch.pm 好像不是以 Unicode 方式去寫入 SQL
    這支程式是不是也需修改已將 Subject 等寫入到 SQL 以對應 UTF-8 網頁?

    我新安裝系統目前有問題 , 還不能測試中文或日文郵件標題

    新裝的 mailwatch 在 maillog 中只能記錄英文的信件主旨(Subject) , 遇到中文的就空白
    以前安裝的機器曾遇過此怪問題 , 後來莫名就正常 work

    中文信件的 Message Headers: 中的標題:
    Subject: =?big5?B?Rlc6 …..

    英文信件的 Subject 沒有 ?big5? 開頭 , 直接就是英文信件主旨 , 應該是跟這個有關吧 !?

    找了很多資料 , 不過還是沒解決

  2. Mailwatch.pm 的部分我沒看到有對subject進行編/解碼,因此有可能是mailscanner api 傳給mailwatch 時就有問題了. 可以確定的是資料庫裡utf-8的subject已經被編/解碼破壞, 非utf-8則是正常的, 可能是utf-8的主旨被當作latin-1解碼, 沒辦法倒回了. 儲存到資料庫裡 headers 欄位部分則是完全未處理的原始信件檔頭資料. 我的修改是直接將 header 部份裡的 subject 取出再根據其指定的編碼及語言別解碼後再轉成utf-8, 理論上只要header裡的”非英文”主旨有符合規範指定語言與編碼方式是可以正確顯示的, 我這邊中英日俄韓都可以正確顯示標題. 例如主旨是您所說的 =?big5?B?Rlc6 ….. 那就是先用base64解碼再將big5轉成utf-8. 沒有指定語言及編碼的部份則當成big5處理(通常是繁體垃圾信件或不合規範的信件). 純英文主旨也會當做big5處理, 但這並不會影響. 您可以直接進資料庫檢查header欄位是否正確儲存, 若有就得檢查apache設定, 若沒就得檢查資料庫設定.

  3. mailwatch 我也看過 , 裡面是沒有編解碼的咚咚在裡面 , 看起來是吃 Mailscanner 丟給它的咚咚然後寫入 SQL 中

    自己比對手邊兩部server的mysql&mailwatch的過程log , 看起來都有正確解碼 , Sql 寫入的語法也都一樣 , 系統中的 log 也都看的到中文主旨 (big5中文字)

    只是錯誤的那一部Server 寫入 subject 這個欄位時 , 若是英文或者 utf-8 的中/日文主旨可正常寫入&顯示
    但遇到主旨為 big5 或 gbk , 就會寫不進去 , 變成空白
    mysql 重裝過 5.0 , 5.1 , 也重裝了 Perl 的DBD::mysql
    兩部 my.cnf 設定一樣 , 還是一樣 , 自己再找找看解決怪問題

    謝謝你的回覆

  4. 發現1.0.5有一小部分更新, 主要就是改成可以適用在php5.3 . 按1.0.5加上修改重新打包上傳.

  5. pear/Mail/mime.php 需更改這三行 , 不然隔離郵件釋放後會是亂碼的通知信件

    ‘html_charset’ => ‘UTF-8’,
    ‘text_charset’ => ‘UTF-8’,
    ‘head_charset’ => ‘UTF-8’,

  6. 我沒對 conf.php裡的 QUARANTINE_SUBJECT , QUARANTINE_MSG_BODY 中文化, 還是保留原值
    若要使用utf-8 中文,也可以直接修改 function.php 的 function
    quarantine_release
    原程式(2292行左右):
    $body = $mime->get();
    修改後:
    $body = $mime->get(array(‘text_charset’ => ‘utf-8’, ‘html_charset’ => ‘utf-8′,’head_charset’ => ‘utf-8’));

  7. I’ve merged my modification and into 1.1 some days ago and checking 1.1.3 now.

    Since version 1.1.X is in rapid development, so I will release my release while it is stable.

    Also, I’ve check with the author and show him he the UTF-8 subject problem and he said will address in the future version.

    You guys can modify mailwatch.pm to fix utf-8 subject problem in a easy way as bellow. But the interface still in english and old existing non-ascii and not-utf8 subjects will be messed up!!
    So, It’s better to suit a new setup.

    modify Mailwatch.pm

    — MailWatch.pm.bak
    +++ MailWatch.pm
    @@ -284,7 +284,7 @@
    $msg{from_domain} = $message->{fromdomain};
    $msg{to} = join(“,”, @{$message->{to}});
    $msg{to_domain} = $todomain;
    – $msg{subject} = $message->{subject};
    + $msg{subject} = $message->{utf8subject};
    $msg{clientip} = $clientip;
    $msg{archiveplaces} = join(“,”, @{$message->{archiveplaces}});
    $msg{isspam} = $message->{isspam};

    modify mailscanner/detail.php

    — detail.php.bak
    +++ detail.php
    @@ -147,7 +147,7 @@
    $output .= ”

    \n”;
    $row[$f] = $output;
    }
    if ($fieldn == “To:” || $fieldn == “Subject:”) {
    – $row[$f] = htmlentities($row[$f]);
    + $row[$f] = htmlspecialchars($row[$f]);
    }
    if ($fieldn == “To:”) {

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。