PHPで作る「メール着信のLINE通知の方法」
メール着信の際にLINEに通知を送る方法を紹介します。特に、エックスサーバー環境でIMAPを使い、PHPで実装する方法を解説します。これにより、特定の条件に合うメールを受信した際に、LINEに通知を送ることができます。
目次
- IMAPサーバーのIPアドレス確認方法(エックスサーバーの管理画面)
- PHPスクリプトの内容と使い方
- LINE Notifyの設定とトークン取得方法
- cronの設定方法(エックスサーバーコントロールパネル)
- Tera TermでのSSH接続と認証鍵設定
- エックスサーバーでのIPアドレスの設定方法
- まとめ
1. IMAPサーバーのIPアドレス確認方法(エックスサーバーの管理画面)
エックスサーバーでのIMAPサーバーのIPアドレスを確認する方法は、サーバーの管理画面で簡単に確認できます。- エックスサーバーの管理画面にログインします。
- エックスサーバーの管理画面にログインし、「サーバーパネル」を選択します。
- 「サーバー情報」メニューを選択し、サーバーの情報を確認します。
- ここで、IMAPサーバーやSMTPサーバーの設定が記載されています。サーバーのIPアドレスは、通常「imap.xserver.jp」として記載されていることが多いですが、必要に応じてそのIPアドレスを確認します。
2. PHPスクリプトの内容と使い方
次に、メール受信後にLINE通知を行うPHPスクリプトの内容です。以下に示すコードをサーバーにアップロードして実行します。0001 <?php
0002 use PhpImap\Imap; // ログファイルにメッセージを書き込む
0003 function log_to_file($message) {
0004 $log_file = ‘/home/xxxxx/xxxxx.co.jp/line_notify_log.txt’;
0005 file_put_contents($log_file, date(“Y-m-d H:i:s”) . ‘ – ‘ . $message . “\n”, FILE_APPEND);
0006 }
0007 // LINE通知を送信
0008 function send_line_notify($message, $token) {
0009 $url = ‘https://notify-api.line.me/api/notify’;
0010 $data = array(‘message’ => $message);
0011 </p> <p> // cURLでLINE通知送信<br ?>
0012 $ch = curl_init($url);
0013 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
0014 curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Authorization: Bearer ‘ . $token));
0015 curl_setopt($ch, CURLOPT_POST, true);
0016 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
0017
0018 $response = curl_exec($ch);
0019 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
0020 curl_close($ch);
0021
0022 // 詳細なエラーメッセージをログに記録
0023 if ($httpCode == 200) {
0024 log_to_file(“LINE通知が送信されました: ” . $message);
0025 } else {
0026 log_to_file(“LINE通知エラー: HTTPコード $httpCode, レスポンス: $response”);
0027 }
0028 }
0029
0030 // メールを確認してLINE通知
0031 function check_email_and_notify() {
0032 $imap_server = ‘IPアドレス’; // IPアドレスに変更
0033 $imap_user = ‘メールアカウント’; // メールアカウント
0034 $imap_password = ‘パスワード’; // パスワード
0035 $token = ‘RTT32qBJd0gQaRQ1c5cPdrUzNbzVTskiu8NKvepmMjc’; // LINE Notify トークン
0036
0037 // IMAPサーバーに接続
0038 $imap = imap_open(“{” . $imap_server . “:993/imap/ssl/novalidate-cert}INBOX”, $imap_user, $imap_password);
0039 if (!$imap) {
0040 log_to_file(“IMAP接続エラー: ” . imap_last_error());
0041 return;
0042 }
0043
0044 // 未読のメールを取得
0045 $emails = imap_search($imap, ‘UNSEEN’);
0046 if ($emails) {
0047 foreach ($emails as $email_number) {
0048 // メールのヘッダーを取得
0049 $overview = imap_fetch_overview($imap, $email_number, 0);
0050 $subject = $overview[0]->subject;
0051 $from = $overview[0]->from;
0052
0053 // 件名と差出人のデコード
0054 $subject = mb_decode_mimeheader($subject);
0055 $from = mb_decode_mimeheader($from);
0056
0057 // メールの構造を取得してエンコーディングを確認
0058 $structure = imap_fetchstructure($imap, $email_number);
0059 $encoding = isset($structure->encoding) ? $structure->encoding : 0;
0060
0061 //———— 本文の取得 ————
0062 $message = ”;
0063 if (isset($structure->parts) && count($structure->parts) > 0) {
0064 foreach ($structure->parts as $part_number => $part) {
0065 if ($part->subtype == ‘PLAIN’ || $part->subtype == ‘HTML’) {
0066 $message = imap_fetchbody($imap, $email_number, $part_number + 1);
0067
0068 if ($part->encoding == 3) { // Base64
0069 $message = base64_decode($message);
0070 } elseif ($part->encoding == 4) { // Quoted-printable
0071 $message = quoted_printable_decode($message);
0072 }
0073 break;
0074 }
0075 }
0076 } else {
0077 $message = imap_fetchbody($imap, $email_number, 1);
0078 if ($encoding == 3) { // Base64
0079 $message = base64_decode($message);
0080 } elseif ($encoding == 4) { // Quoted-printable
0081 $message = quoted_printable_decode($message);
0082 }
0083 }
0084
0085 // メールの本文をLINEに通知
0086 send_line_notify(“新しいメールが届きました\n件名: $subject\n差出人: $from\n本文: $message”, $token);
0087 }
0088 } else {
0089 log_to_file(“新しいメールはありません”);
0090 }
0091
0092 // IMAP接続を閉じる
0093 imap_close($imap);
0094 }
0095
0096 // メールチェックとLINE通知
0097 check_email_and_notify();
0098 ?>
0002 use PhpImap\Imap; // ログファイルにメッセージを書き込む
0003 function log_to_file($message) {
0004 $log_file = ‘/home/xxxxx/xxxxx.co.jp/line_notify_log.txt’;
0005 file_put_contents($log_file, date(“Y-m-d H:i:s”) . ‘ – ‘ . $message . “\n”, FILE_APPEND);
0006 }
0007 // LINE通知を送信
0008 function send_line_notify($message, $token) {
0009 $url = ‘https://notify-api.line.me/api/notify’;
0010 $data = array(‘message’ => $message);
0011 </p> <p> // cURLでLINE通知送信<br ?>
0012 $ch = curl_init($url);
0013 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
0014 curl_setopt($ch, CURLOPT_HTTPHEADER, array(‘Authorization: Bearer ‘ . $token));
0015 curl_setopt($ch, CURLOPT_POST, true);
0016 curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
0017
0018 $response = curl_exec($ch);
0019 $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
0020 curl_close($ch);
0021
0022 // 詳細なエラーメッセージをログに記録
0023 if ($httpCode == 200) {
0024 log_to_file(“LINE通知が送信されました: ” . $message);
0025 } else {
0026 log_to_file(“LINE通知エラー: HTTPコード $httpCode, レスポンス: $response”);
0027 }
0028 }
0029
0030 // メールを確認してLINE通知
0031 function check_email_and_notify() {
0032 $imap_server = ‘IPアドレス’; // IPアドレスに変更
0033 $imap_user = ‘メールアカウント’; // メールアカウント
0034 $imap_password = ‘パスワード’; // パスワード
0035 $token = ‘RTT32qBJd0gQaRQ1c5cPdrUzNbzVTskiu8NKvepmMjc’; // LINE Notify トークン
0036
0037 // IMAPサーバーに接続
0038 $imap = imap_open(“{” . $imap_server . “:993/imap/ssl/novalidate-cert}INBOX”, $imap_user, $imap_password);
0039 if (!$imap) {
0040 log_to_file(“IMAP接続エラー: ” . imap_last_error());
0041 return;
0042 }
0043
0044 // 未読のメールを取得
0045 $emails = imap_search($imap, ‘UNSEEN’);
0046 if ($emails) {
0047 foreach ($emails as $email_number) {
0048 // メールのヘッダーを取得
0049 $overview = imap_fetch_overview($imap, $email_number, 0);
0050 $subject = $overview[0]->subject;
0051 $from = $overview[0]->from;
0052
0053 // 件名と差出人のデコード
0054 $subject = mb_decode_mimeheader($subject);
0055 $from = mb_decode_mimeheader($from);
0056
0057 // メールの構造を取得してエンコーディングを確認
0058 $structure = imap_fetchstructure($imap, $email_number);
0059 $encoding = isset($structure->encoding) ? $structure->encoding : 0;
0060
0061 //———— 本文の取得 ————
0062 $message = ”;
0063 if (isset($structure->parts) && count($structure->parts) > 0) {
0064 foreach ($structure->parts as $part_number => $part) {
0065 if ($part->subtype == ‘PLAIN’ || $part->subtype == ‘HTML’) {
0066 $message = imap_fetchbody($imap, $email_number, $part_number + 1);
0067
0068 if ($part->encoding == 3) { // Base64
0069 $message = base64_decode($message);
0070 } elseif ($part->encoding == 4) { // Quoted-printable
0071 $message = quoted_printable_decode($message);
0072 }
0073 break;
0074 }
0075 }
0076 } else {
0077 $message = imap_fetchbody($imap, $email_number, 1);
0078 if ($encoding == 3) { // Base64
0079 $message = base64_decode($message);
0080 } elseif ($encoding == 4) { // Quoted-printable
0081 $message = quoted_printable_decode($message);
0082 }
0083 }
0084
0085 // メールの本文をLINEに通知
0086 send_line_notify(“新しいメールが届きました\n件名: $subject\n差出人: $from\n本文: $message”, $token);
0087 }
0088 } else {
0089 log_to_file(“新しいメールはありません”);
0090 }
0091
0092 // IMAP接続を閉じる
0093 imap_close($imap);
0094 }
0095
0096 // メールチェックとLINE通知
0097 check_email_and_notify();
0098 ?>
3. LINE Notifyの設定とトークン取得方法
LINE Notifyのトークンは、LINE Notifyの公式ページから取得できます。手順は以下の通りです。- LINE Notify公式サイトにアクセスします。
- LINEアカウントでログインします。
- 「マイページ」から「アクセストークンを発行」を選びます。
- トークンの名前と通知を受け取りたい対象(グループや個人)を選択して「発行」ボタンをクリックします。
- 発行されたアクセストークンをPHPスクリプト内の
$token
変数に設定します。
4. cronの設定方法(エックスサーバーコントロールパネル)
エックスサーバーでcronジョブを設定する方法を説明します。- エックスサーバーの管理画面にログインします。
- メニューから「サーバーパネル」に移動し、「Cronジョブ設定」を選択します。
- 「新規追加」をクリックし、実行するコマンド(PHPスクリプト)を指定します:
0001 /usr/bin/php /home/xxxx/xxxx.co.jp/line_notify.php - 実行間隔の設定: 実行したい頻度を設定します。
例えば、毎分実行する場合は次のように設定します:
これは「毎分」の設定です。毎日1回、特定の時間に実行したい場合は以下のように設定できます: - 保存をクリックして、設定を反映させます。
5. Tera TermでのSSH接続と認証鍵設定
- Tera Termを開き、サーバーのIPアドレスを入力して接続します。
- 公開鍵認証を使用するためには、公開鍵をサーバーに設定します。Tera Termで鍵を生成し、公開鍵をサーバーに登録します。
- 認証キーを削除する場合、以下のコマンドをSSHで実行します:
0001 rm ~/.ssh/id_rsa
0002 rm ~/.ssh/id_rsa.pub
6. エックスサーバーでのIPアドレスの設定方法
エックスサーバーでIPアドレスを確認・設定する方法は、管理画面の「サーバー情報」セクションから確認できます。管理画面内で「サーバー情報」を選択し、表示されるIPアドレスを確認してください。
7. まとめ
これで、エックスサーバーでメール着信をLINEに通知するシステムを構築する方法がわかりました。cronジョブを使うことで定期的にメールチェックができ、LINE Notifyを使って簡単に通知を送信できます。
これらの設定を行うことで、メールを見逃さず、LINEを通じて即座に通知を受け取ることができます。