いざというときにサイトからメールが届かないトラブルを防ぐ方法

公開日:2024(令和6)年6月20日/最終更新日:

WordPressのカスタマイズ方法についての画像

【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています



WordPressでは、何等かの不具合によってサイトの動作がストップした時、「サイトに重大なエラーが発生しました」と画面に表示され、同時にサイトのメールアドレス(「設定」画面で「管理者のメールアドレス」に登録しているメールアドレス)宛に、エラーの発生内容や、それを一旦無視して(適用させないようにして)修復を試みることができるリカバリーモード用のURLが掲載されたメールが送られてきます。

また、ログイン用のユーザー名やパスワードが分からなくなってしまった時にも、ユーザーのメールアドレスさえわかればパスワードの変更を申請し、届いたメールから、メールアドレスとパスワードでログインできるようになっています。

でも、このメールアドレスが正しくなかった場合やサイトからきちんとメールが送出されなかった場合には、当然ながらメールは届かず、かなり戸惑うことになります。

一応WordPressでは、6カ月ごとに管理者権限を有するユーザーがログインした際、下図のような確認画面を出すような仕組みになっています。

管理者メールアドレスの検証画面

が、これは単純にメールアドレスが合ってるかどうかのチェックだけで、実際に届くかどうかというのを確かめられるものではありません。

また、WordPressではユーザーを新規登録する場合を除き、初期インストール時に「サイト管理者のメールアドレス(サイトのメールアドレス)」と最初の管理権限を持つユーザーのメールアドレスを共通にして設定するようになっていて、インストールが完了すると、そのアドレス宛に「サイトを作成しました(だったかな?)」という件名のメールが届くようになっているものの、それが届くものと認識しておらず、届いていなくても、つまりメールアドレスが間違っていても気づかないケースがあります。

こうした要因から想像するに、恐らくトラブル発生時などにメールが来ない人のほとんどは、この画面で何気なく「正しいメールアドレスです」をクリックしているか、インストールから6カ月経過していないかのいずれかでしょう。

そこで本ページでは、転ばぬ先の杖として、毎回ログイン時に「管理者メールアドレス」と実際にログインしたユーザーのメールアドレスへ自動でメールを送るようにするコードを紹介しておきます。

毎回メールが届くなんて面倒と思うかも知れませんが、自身で手動復旧できない、または自身で手動復旧を試みてさらにおかしな状況になってしまった場合には、相当の金額を払ってプロに頼むことになるので、それを思えば届いたメールを削除する方がいいのではないでしょうか?

本ページで掲載しているコードは、以下に了承した上で使用ください

  • コードは商用・非商用問わず自由に使っていただいて構いませんが、コード追加による不具合やトラブルが発生しても当方では一切責任を負いません
  • コードは有効化しているテーマのfunctions.php、style.cssなどへ追加することで機能します。それらのファイルへの変更を行うことに不安のある方は使用しないでください
  • コードは本ページの公開日時点で私の環境において動作したものです。WordPressバージョン他環境の違いによって動作しないことがあります
  • コードは、セキュリティ、コードの正確さなどにおいて完全なものではありません。中には紹介するコードを簡略化するために省略している部分があるものもありますので、ご自身でコードを十分に検証し、必要な部分の編集を行った上で使用するようにしてください
  • 掲載しているのは参考コードです。自身の環境に合わせるための編集はご自身で対応いただく必要があります(コメント欄等から質問いただいても基本回答は致しません)
  • 掲載しているコードの転載を禁じます(SNSで紹介いただいたり、本ページへのリンクを張っていただくことは大歓迎です)

ログイン後にメール通知をするためのコード

以下のコードを有効化しているテーマのfunctions.phpへ貼り付けるだけで機能します(確認のメールなので届くメールの文言はこのままでいいのではないかと思います)。

/* ログイン後に「管理者メールアドレス」へ通知 */
function pwcn_send_login_notification_to_admin($user_login, $user) {
	$admin_email = get_option( 'admin_email' );
	$subject = 'ログイン通知';
	$message = 'ユーザー ' . $user_login . ' がサイトにログインしました。' . "\n\n";
	$message .= 'ログイン元のIPアドレス: ' . $_SERVER['REMOTE_ADDR'];
    
	wp_mail( $admin_email, $subject, $message );
}
add_action('wp_login', 'pwcn_send_login_notification_to_admin', 10, 2);

/* ログイン後にログインしたユーザーのメールアドレスへ通知 */
function pwcn_send_login_notification_to_user($user_login, $user) {
	$user_email = $user->user_email;
	$subject = 'ログイン通知';
	$message = 'サイトにログインしました。' . "\n\n";
	$message .= 'ログイン元のIPアドレス: ' . $_SERVER['REMOTE_ADDR'];
    
	wp_mail( $user_email, $subject, $message );
}
add_action('wp_login', 'pwcn_send_login_notification_to_user', 10, 2);

コメントで入れていますが、上半分が「管理者メールアドレス」に設定されているメールアドレス宛のメール、下半分がログインしたユーザー宛に送信するメールです。

どちらもログインしたユーザーのIPアドレスを本文に含めるようにしています。

QA Analytics QA Analytics

【補足】管理者メールアドレスと管理ユーザーのメールアドレスは別のものにしましょう

冒頭でさらっと書きましたが、インストール時に管理者メールアドレス(ややこしいのでサイトのメールアドレスとします)と最初に登録する管理ユーザーのメールアドレスは共通のものがセットされます。

この共通のメールアドレスは、様々なシーンでメールの送信元として使用されます。

つまり、そのままにしておくと、サイトの仕様や機能によっては管理ユーザーのログイン情報の一部を自身で漏洩させているようなものなのです。

本ページとは直接関係ありませんが、この2つのメールアドレスは、インストールしたらなるべく早いうちに別々のものにしておくことをおすすめします。

以下のページではそれ以外にも自身でできるWordPressのセキュリティについて書いていますのでよかったらどうぞ。



Lolipop ServerMoshimo Ad x-serverMoshimo Ad

WordPressのカスタマイズ方法についての画像
画面に表示させずにデバッグ情報(エラーや警告の情報)を取得する方法