Appearance
P-WORLD メールアーカイブ:取得 0 件・ログが出ない
管理画面で「取得: 0 件」と出るのは、多くの場合 例外ではなく IMAP クライアントが空配列を返した状態です。次の順で確認してください。
1. 認証情報の置き場所(verify-define)
PWORLD_IMAP_HOST / PWORLD_IMAP_USER / PWORLD_IMAP_PASSWORD は wp-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 extensions に imap があるか確認する。
対処の例(環境ごと):
| 環境 | 目安 |
|---|---|
| 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 failed と imap_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 表示(公開の日別メールブロックと管理画面プレビュー)は PworldMailHtmlSanitizer で wp_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)に出力されます。パスワードは出力しません。