Skip to content

P-WORLD メールアーカイブ:取得 0 件・ログが出ない

管理画面で「取得: 0 件」と出るのは、多くの場合 例外ではなく IMAP クライアントが空配列を返した状態です。次の順で確認してください。

1. 認証情報の置き場所(verify-define

PWORLD_IMAP_HOST / PWORLD_IMAP_USER / PWORLD_IMAP_PASSWORDwp-config.php での define() のみが参照されます。テーマの config/local.env やシェルの環境変数だけでは読み込まれません。

  • define()wp-settings.php 読み込みより前に記述する。
  • 値が空文字だと取得処理は動かず、サーバーログに不足定数のメッセージが出ます(実装後)。

2. PHP の IMAP 拡張(verify-imap-ext

imap_open が無い環境では取得できません。WordPress を動かしている PHP(CLI と php.ini が違うことがある)で確認してください。

  • 管理画面用の phpinfo()、またはローカルなら Local 等のサイト設定に表示される PHP バイナリで imap が有効か確認する。
  • Homebrew の php -m と、実際の Web サーバ用 PHP は一致しない場合があります。

拡張が無い場合、サーバーログに PHP imap extension is not loaded が記録されます(実装後)。

ログに PHP imap extension is not loaded と出る場合

このメッセージが出ている時点で、認証情報や Gmail の設定以前に、PHP が IMAP を提供していません。 対象は ブラウザ経由で WordPress を実行している PHP(CLI ではない)です。

確認: サイト直下に一時的に phpinfo.php を置き、imap で検索してセクションがあるか見る。または Loaded extensionsimap があるか確認する。

対処の例(環境ごと):

環境目安
Linux(apt 系)sudo apt-get install php-imap(バージョンに合わせて php8.3-imap 等)のあと Web サーバを再起動。
ConoHa WING 等サーバーの「PHP 設定」で拡張の有効化や php.ini の編集が可能な場合、extension=imap を有効にする(ホスティングのマニュアルに従う)。
Local by Flywheel(macOS/Windows)同梱 PHP に imap が含まれていないことが多い。サイトの「PHP バージョン」変更やカスタム php.ini だけでは解消しない場合がある。別のローカル環境(IMAP 付き PHP の Docker / Homebrew PHP + 手動サーバ等)で試すか、ステージングで動作確認する選択肢になる。
Homebrew PHP(ローカル開発)php -m | grep -i imap で確認。無い場合は OS・PHP バージョンに応じて pecl install imap やディストリビューションの php-imap パッケージを調べる(要コンパイルツール)。

まとめ: このメール取得機能は PHP の imap 拡張が必須です。拡張を有効にしたうえで、再度「今すぐ取得・保存する」を実行してください。

3. メールボックス文字列(verify-mailbox-string

Gmail を使う場合、IMAP は SSL / 993 が必要です。PWORLD_IMAP_HOST に次のいずれかを推奨します。

  • ホスト名のみ imap.gmail.com と書いている場合:実装では {imap.gmail.com:993/imap/ssl}INBOX に自動変換します。
  • 明示したい場合は PWORLD_IMAP_HOST にそのまま全文を指定できます。
text
{imap.gmail.com:993/imap/ssl}INBOX

他プロバイダは公式の IMAP 接続文字列に合わせて PWORLD_IMAP_HOST{ホスト:ポート/imap/ssl}... 形式で指定してください。

接続失敗時は imap_open failedimap_last_error() の内容がサーバーログに残ります(実装後)。

4. 差出人アドレス(verify-sender

取得対象は members@p-world.co.jp からのメールのみ(IMAP 検索 FROM)です。実際のメールの差出人が別アドレス(別ドメイン・エイリアス等)の場合は 0 件になります。

差出人を確認するには、メールクライアントで該当メールのヘッダの From: を確認してください。開発時は WP_DEBUG を有効にすると、一致しなかった検索条件がログに出ます。

5. 取得はできたが processed_html が空(verify-nested-mime

管理画面で「保存: N 件」と出て、phpMyAdmin で wp_pworld_mail_archive に行が増えるのに processed_html だけ空のときは、多くの場合 MIME の入れ子が原因でした(例: multipart/mixed の内側に multipart/alternative があり、本文の text/html がトップレベルのパートに無い)。

実装では ネストした MIME を再帰的に走査し、text/html を優先して text/plain をフォールバックにするようになっています。

  • 修正前に取り込んだ行は本文が無いままなので、該当行を削除してから管理画面で「今すぐ取得・保存する」を実行し直すか、期間を指定して再取得してください。
  • それでも空の場合は、メールが HTML でもプレーンでもない特殊形式の可能性があります。Content-Type をヘッダで確認してください。

6. 表示のスタイル(インライン style 属性)

アーカイブの HTML 表示(公開の日別メールブロックと管理画面プレビュー)は PworldMailHtmlSanitizerwp_kses しており、インラインの style 属性を許可しています(WordPress の safecss 系処理を経由)。<style> 要素は許可していません(ページ全体への CSS 漏れを防ぐため)。メールによっては外部 CSS のみでレイアウトしている場合は、取り込み後も見た目がメールクライアントと完全一致しないことがあります。

P-WORLD 形式の本文は <html><body style="..."><font color size> が多用されるため、html / head / body は表示前に外し、body の style を先頭の div に移す処理を入れています(モーダル内のフラグメントでも背景色などが効くようにするため)。<font><blink> も許可タグに含めています。

ログの見方

診断メッセージはプレフィックス [PworldArchive][Imap]PHP の error_log(通常は Web サーバのエラーログ、または WP_DEBUG_LOG 有効時の wp-content/debug.log)に出力されます。パスワードは出力しません。