apice-technologymemorandum

メールを受信したらその内容を記録したい

1.メールサーバーの設定
まず、Linuxサーバーにメールサーバーソフトウェア(例:Postfix)を設定します。Postfixは、Linuxで広く使用されているメール転送エージェントです。これを使って、メールの受信と特定の操作をトリガーするように設定します。

2. PHPスクリプトの準備
PHPを使用してメールを受信し、その内容をデータベースに書き込むスクリプトを作成します。このスクリプトでは、受信したメールの解析とデータベースへの書き込み処理を行います。

3. メールの受信をトリガーとしたスクリプト実行の設定
Postfixを使用して、特定のメールアドレスにメールが届いた場合にPHPスクリプトを実行するように設定します。これは、Postfixのaliasesファイルやmaster.cfファイルを編集して行います。

以下に、これらのステップを詳細に説明します。

ステップ 1: Postfixのインストールと設定

CODE
1.POSTFIX のインストール
sudo apt-get update
sudo apt-get install postfix

2.Postfixの基本設定を行い、特定のドメインのメールを受け取れるようにします。
ステップ 2: PHPスクリプトの作成
PHPスクリプト(mail_to_db.php)を作成し、受信したメールの内容を解析してデータベースに書き込む処理を記述します。

以下はPHPスクリプトの簡単な例です:

// データベース接続設定
$dsn = 'mysql:host=localhost;dbname=your_db_name';
$user = 'your_db_user';
$password = 'your_db_password';

try {
$dbh = new PDO($dsn, $user, $password);

// 標準入力からメール内容を取得
$emailContent = file_get_contents("php://stdin");

// メールからメールアドレス、タイトル、本文を抽出(簡易的な例)
// 実際には、メールのパースにはもっと複雑な処理が必要になる場合があります
$from = "example@example.com";
$subject = "Test Subject";
$message = "Test Message";

// データベースに書き込み
$sql = "INSERT INTO emails (from, subject, message) VALUES (:from, :subject, :message)";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(':from', $from);
$stmt->bindParam(':subject', $subject);
$stmt->bindParam(':message', $message);
$stmt->execute();
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>


このスクリプトは非常に基本的なもので、実際のメールパースにはMIMEパースなど、もっと複雑な処理が必要です。

ステップ 3: Postfixの設定
/etc/aliasesや/etc/postfix/virtual(設定によって





上記はメールサーバー側の設定を変更ができる場合ですが、そうでない場合はもっとアプリよりの解決案があります。

方針 POP3を使用してメールを取得する

Postfixの設定が難しい場合や、直接メールサーバーに介入することができない状況でメールの内容を取得したい場合は、POP3やIMAPを使用してメールサーバーからメールを取得する方法があります。PHPには、これらのプロトコルを扱うための関数が用意されています。ここでは、POP3を使用してメールを取得し、その内容をデータベースに保存する方法について説明します。

必要なもの
PHPがインストールされているサーバー
メールサーバーのPOP3またはIMAPアクセス情報(ホスト名、ユーザー名、パスワード)
メールを保存するためのデータベース
ステップバイステップのガイド
1. PHPスクリプトの準備
以下は、POP3を使用してメールを取得し、メールの情報をデータベースに保存するPHPスクリプトの例です。


CODE
// データベース接続情報
$dbHost = 'localhost';
$dbName = 'your_database';
$dbUser = 'your_username';
$dbPassword = 'your_password';

// メールサーバー接続情報
$mailHost = 'your.mailserver.com';
$mailUser = 'your_email@example.com';
$mailPassword = 'your_email_password';
$mailPort = 110; // POP3の標準ポート

// データベースに接続
$db = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8", $dbUser, $dbPassword);

// POP3を使用してメールサーバーに接続
$mailbox = imap_open("{{$mailHost}:$mailPort/pop3}", $mailUser, $mailPassword);

// メールボックス内のメールをチェック
$emails = imap_search($mailbox, 'ALL');

if ($emails) {
foreach ($emails as $email_number) {
// メールのヘッダー情報を取得
$overview = imap_fetch_overview($mailbox, $email_number, 0);
$message = imap_fetchbody($mailbox, $email_number, 2);

// データベースにメール情報を保存
$stmt = $db->prepare("INSERT INTO emails (subject, from, body) VALUES (:subject, :from, :body)");
$stmt->execute([
':subject' => $overview[0]->subject,
':from' => $overview[0]->from,
':body' => $message
]);
}
}

// 接続を閉じる
imap_close($mailbox);
?>


このスクリプトは、指定されたメールサーバーにPOP3で接続し、全てのメールを検索して、各メールの件名、差出人、本文をデータベースに保存します。

2. データベースの準備
スクリプトで使用するデータベースとテーブルを準備します。例えば、以下のSQLを使用してテーブルを作成します。



注意点
定期的にメールをチェックするためには、このPHPスクリプトをcronジョブなどで定期実行する必要があります。
この方法では、メールサーバーに保管されているメールを直接操作しますので、メールの削除や既読マーキングに注意してください。
この方法は、メールサーバーの設定変更が難しい場合や、アプリケーションレベルでメール処理を行いたい場合に有効です。

Web制作カテゴリーに戻る

1