おやじ様のHPは、かなり参考にさせて頂いています。
CentOS4にてサーバを構築したのですが、大部分についてはHPの情報を元に組むことができました。ありがとうございます。
構築も終わり運用し始めたとことなのですが、1通のメールが到達しない現象が発生しました。
SMTP関連の環境はPostfix、PostfixAdmin、MaiaMailGuard1.0.2a、ClamAV、SpamAssasinを組み込んでいます。
エラーはamavisdがmaia_mailテーブルにINSERTの際に発生し、その条件は、UTF-8で記述されたメールの本文中にシングルクォートで囲われた奇数文字の漢字が存在する時にエラーになるように見えます。
SJISで記述した場合は正常に動作しますし、UTF-8でも「'ああ'」は正常ですが「'あああ'」はエラーが発生します。
amavisdのコードを見ると、"?"に代入する形式で変数値を設定しているので、DBI等のバージョンをあげたら解消されるかと思い、DBIを1.605、DBD::mysqlを4.007にしてみましたが、変化は見られませんでした。
amavisdを書き換え、INSERT前に本文のシングルクォートを削除する事により暫定的に通るようにできましたが、どんな影響がでるか不明です。
なにかよい方法がありましたら、ご教授お願いします。
> 構築も終わり運用し始めたとことなのですが、1通のメールが到達しない現象が発生しました。
> SMTP関連の環境はPostfix、PostfixAdmin、MaiaMailGuard1.0.2a、ClamAV、SpamAssasinを組み込んでいます。
> エラーはamavisdがmaia_mailテーブルにINSERTの際に発生し、その条件は、UTF-8で記述されたメールの本文中にシングルクォートで囲われた奇数文字の漢字が存在する時にエラーになるように見えます。
> SJISで記述した場合は正常に動作しますし、UTF-8でも「'ああ'」は正常ですが「'あああ'」はエラーが発生します。
> amavisdのコードを見ると、"?"に代入する形式で変数値を設定しているので、DBI等のバージョンをあげたら解消されるかと思い、DBIを1.605、DBD::mysqlを4.007にしてみましたが、変化は見られませんでした。
>
> amavisdを書き換え、INSERT前に本文のシングルクォートを削除する事により暫定的に通るようにできましたが、どんな影響がでるか不明です。
おやじの環境(SuSE10.3)ではエラーらしきものはありません。というより、これはこれで調査が必要ですがUTF-8のメールは本文が記録されないことがわかりました。KenZは大丈夫ですか?
修正されたのは、"maia_store_mail" のところと思いますが、具体的にどんなエラーがでるのでしょうか?
ときどき見かけるエスケープ問題のような気もします。
残念ながら今は時間がとれませんので、検証することができません。
回答ありがとうございます。
> おやじの環境(SuSE10.3)ではエラーらしきものはありません。というより、これはこれで調査が必要ですがUTF-8のメールは本文が記録されないことがわかりました。KenZは大丈夫ですか?
本文が記録されないというのは、maia_mailテーブルにですよね?
私の環境では、テーブル中にも記録されているようですし、Webで判定待ちのメール内容を見ても表示されるので、大丈夫だと思います。
> 修正されたのは、"maia_store_mail" のところと思いますが、具体的にどんなエラーがでるのでしょうか?
maillogに下記のメッセージが出力されます。
Jul 15 09:37:58 lis-dragon postfix/smtp[9837]: AE97E6444F7: to=<メールアドレス>, orig_to=<メールアドレス>, relay=127.0.0.1[127.0.0.1], delay=0, status=deferred (host 127.0.0.1[127.0.0.1] said: 451 4.5.0 Error in processing, id=14239-05, mime_decode-1 FAILED: DBD::mysql::st execute failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\\" シングルクォートが閉じた後の本文' at line 1 at /usr/sbin/amavisd line 3792, <GEN5> line 71595. (in reply to end of DATA command))
> ときどき見かけるエスケープ問題のような気もします。
恐らくそうであるような気がします。
何らかのコードの組み合わせで、シングルクォートのエスケープが打ち消されて、VALUES句中に不明な文字が現れてしまっているのだと思われます。
時間のある時に、execute関数の内部動作を追ってみようかと思います。