トリアエズぶろぐ
フリーランスでやってる77世代のWEBプログラマが福岡からのんびりとお送りいたします。
スポンサーサイト


一定期間更新がないため広告を表示しています

<< サーバのアラートメールを大量に受信してたらIPごとGmailにブロックされた | main |
CentOS4のdovecotでメール受信時にエラーが出て受信できない


未だにこんなヘルプが来るので備忘録(苦笑

 

 

CentOS4のdovecotで以下のようなエラーが出てメールが受信できない

pop3(*****): file lib.c: line 37 (nearest_power): assertion
failed: (num <= ((size_t)1 << (BITS_IN_SIZE_T-1)))

 

https://www.somerandomstuff.com/2011/09/30/dovecot-crash/

によるとメールのboundaryが閉じていないメールがあるとこのようになるらしい

#dovecotをバージョンアップすればよいのだろうけど、CentOS4のyumじゃ無理だった

 

コマンドからこのメールを削除すればOKなのだが、未読が多い場合

どのメールがおかしなフォーマットなのか判別できない。

 

なのでPHPで即席簡易boudaryチェッカーを作ってメールspoolデータをチェック、

目視でboudaryが閉じていないメールを見つけてそいつを削除すればOKでした。

#もちろんroot権限で

 

以下即席チェッカー

<?php
ini_set('memory_limit', '64M');
$path = '/var/spool/mail/hogehoge';


$lines = file($path);
foreach($lines as $v){
    if (preg_match('/boundary="?(.+)"?/', $v, $match)){
        $boundary = $match[1];
        continue;
    }
    
    if ($boundary && strstr($v, $boundary)){
        print "{$v}¥n";
    }
    
}

 

 

スポンサーサイト


COMMENT









Trackback URL
http://akihiro.jugem.jp/trackback/310
TRACKBACK