ワードプレス

PHPで作る「メール着信のLINE通知の方法」

メール着信の際にLINEに通知を送る方法を紹介します。特に、エックスサーバー環境でIMAPを使い、PHPで実装する方法を解説します。これにより、特定の条件に合うメールを受信した際に、LINEに通知を送ることができます。


目次

  1. IMAPサーバーのIPアドレス確認方法(エックスサーバーの管理画面)
  2. PHPスクリプトの内容と使い方
  3. LINE Notifyの設定とトークン取得方法
  4. cronの設定方法(エックスサーバーコントロールパネル)
  5. Tera TermでのSSH接続と認証鍵設定
  6. エックスサーバーでのIPアドレスの設定方法
  7. まとめ


1. IMAPサーバーのIPアドレス確認方法(エックスサーバーの管理画面)

エックスサーバーでのIMAPサーバーのIPアドレスを確認する方法は、サーバーの管理画面で簡単に確認できます。

  1. エックスサーバーの管理画面にログインします。
    • エックスサーバーの管理画面にログインし、「サーバーパネル」を選択します。
  2. 「サーバー情報」メニューを選択し、サーバーの情報を確認します。
    • ここで、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 ?>



3. LINE Notifyの設定とトークン取得方法

LINE Notifyのトークンは、LINE Notifyの公式ページから取得できます。手順は以下の通りです。

  1. LINE Notify公式サイトにアクセスします。
  2. LINEアカウントでログインします。
  3. 「マイページ」から「アクセストークンを発行」を選びます。
  4. トークンの名前と通知を受け取りたい対象(グループや個人)を選択して「発行」ボタンをクリックします。
  5. 発行されたアクセストークンをPHPスクリプト内の$token変数に設定します。


4. cronの設定方法(エックスサーバーコントロールパネル)

エックスサーバーでcronジョブを設定する方法を説明します。

  1. エックスサーバーの管理画面にログインします。
  2. メニューから「サーバーパネル」に移動し、「Cronジョブ設定」を選択します。
  3. 「新規追加」をクリックし、実行するコマンド(PHPスクリプト)を指定します:
    0001 /usr/bin/php /home/xxxx/xxxx.co.jp/line_notify.php
  4. 実行間隔の設定: 実行したい頻度を設定します。
    例えば、毎分実行する場合は次のように設定します:

    これは「毎分」の設定です。毎日1回、特定の時間に実行したい場合は以下のように設定できます:

  5. 保存をクリックして、設定を反映させます。



5. Tera TermでのSSH接続と認証鍵設定

  1. Tera Termを開き、サーバーのIPアドレスを入力して接続します。
  2. 公開鍵認証を使用するためには、公開鍵をサーバーに設定します。Tera Termで鍵を生成し、公開鍵をサーバーに登録します。
  3. 認証キーを削除する場合、以下のコマンドをSSHで実行します:
    0001 rm ~/.ssh/id_rsa
    0002 rm ~/.ssh/id_rsa.pub




6. エックスサーバーでのIPアドレスの設定方法

エックスサーバーでIPアドレスを確認・設定する方法は、管理画面の「サーバー情報」セクションから確認できます。
管理画面内で「サーバー情報」を選択し、表示されるIPアドレスを確認してください。



7. まとめ

これで、エックスサーバーでメール着信をLINEに通知するシステムを構築する方法がわかりました。
cronジョブを使うことで定期的にメールチェックができ、LINE Notifyを使って簡単に通知を送信できます。
これらの設定を行うことで、メールを見逃さず、LINEを通じて即座に通知を受け取ることができます。
スポンサードリンク

関連記事一覧