Ktai Entryをcronで実行したときに発生するFatal errorの対処

WordPress

WordPressへの投稿をメールからできる「Ktai Entry」という便利なプラグインがあります。

もう何年も使い続けているプラグインなのですが、最近二重投稿を繰り返したり、メモリ不足で落ちたり、投稿済みメールが削除されなかったりとトラブルが続いたので状況を確認してみました。

私が管理するサイトではメール取得&投稿を定期的にcronで実行していますが、ログを取ってみたらFatal errorで処理落ちしていたようです。

PHP Fatal error:  Uncaught exception 'phpmailerException' with message 'Invalid address: wordpress@' in /home/nikaidou/www/wp-includes/class-phpmailer.php:946

状況を調べてみると、メール送信するときに送信元メールアドレス(Fromアドレス)のフォーマットが正しくないということでFatal errorが発生していたようです。

ということで、送信元メールアドレスを設定しているところを確認してみたところ、Ktai Entryでは送信元メールアドレスを環境変数から作成しているのですが、cronからの実行時には取得できない値を参照しているので上手に処理されなかったようです。

$wp_email = 'wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));

ktai_entry.phpの458行目で、環境変数$_SERVERからドメイン名を取得しようとしています。$_SERVERはcronからの実行時にはセットされない変数なので取得することができず、送信元メールアドレスが「wordpress@」になってしまいます。

if(isset($_SERVER) and isset($_SERVER['SERVER_NAME']))
  $wp_email = 'wordpress@' . preg_replace('#^www\.#', '', strtolower($_SERVER['SERVER_NAME']));
else
  $wp_email = 'wordpress@8wired.jp'

とりあえず、こんな感じに$_SERVERがセットされてないときには、指定したメールアドレスを利用するようにプログラムを修正することで、Fatal errorで処理落ちすることなく投稿済みメールが削除されるようになりました。

Ktai Entryは最終更新から4-5年も経過していて、これまで大きなトラブルもなかったのでWordpressのアップデートの影響があったのかもしれませんが、プログラム的には昔から発生していても不思議ではない状況です。

それにも関わらず、ネットで探しても情報が出てこなかったのが不思議でなりませんが、Ktai Entryをcronで動かしている人っていないんですかね?

メモリ不足についてはメールサーバに(画像が添付された?)投稿済みメールが貯まっていると、それらの処理中にメモリ不足が発生するような状況だったので、投稿済みメールが削除されれば(たぶん)改善されると思います。memory_limitは128MBで運用してます。

二重投稿の原因はFatal errorを見つけてしまったので、今後の様子見ということで調査しませんでした。

コメント

  1. wanta より:

    同じ症状でした。ありがとうございました。

    • しょーた@管理人 より:

      >wantaさん

      コメントありがとうございます。

      お役に立てて何よりです。Ktai-Entryには他にも潜在的なバグがあるので注意が必要かもしれません。

タイトルとURLをコピーしました