apice-technologymemorandum

メールで取得したデータをシステムが受けてDBに書き込む

メールで特定のメールアドtレスに来たタイトルと内容をデータベースに落として、後で閲覧します。
まずはメールからタイトルの取得とネイ用の取得のPHPサンプルを示します。

メールクライアントはIMAPでいいと思う、POPも書いてみるが、システムで受けるからIMAP  一本で問題ないような気がします。

メールのタイトルと内容を取得して、データベースに格納するPHPプログラムの基本的なサンプルコードを以下に示します。このサンプルでは、PHP IMAPライブラリを使用してメールを取得し、PDOを使用してデータベースに保存します。

前提条件
PHP IMAPライブラリがインストールされていること。
データベース(例:MySQL)がセットアップされていること。
データベーステーブルの作成
まず、データベースに必要なテーブルを作成します。

sql
コードをコピーする
CREATE TABLE emails (
id INT AUTO_INCREMENT PRIMARY KEY,
email_address VARCHAR(255) NOT NULL,
subject VARCHAR(255) NOT NULL,
body TEXT NOT NULL,
received_date DATETIME NOT NULL
);
PHPスクリプト
以下に、IMAPサーバーからメールを取得してデータベースに保存するPHPスクリプトのサンプルを示します。

php
コードをコピーする

// IMAPサーバーの設定
$hostname = '{imap.example.com:993/imap/ssl}INBOX';
$username = 'your_email@example.com';
$password = 'your_password';

// データベース接続設定
$dbHost = 'localhost';
$dbName = 'your_database';
$dbUser = 'your_db_user';
$dbPass = 'your_db_password';

try {
// データベース接続
$pdo = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8", $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// IMAPサーバーに接続
$inbox = imap_open($hostname, $username, $password) or die('Cannot connect to IMAP server: ' . imap_last_error());

// メールの取得
$emails = imap_search($inbox, 'ALL');

if ($emails) {
rsort($emails);
foreach ($emails as $email_number) {
$overview = imap_fetch_overview($inbox, $email_number, 0);
$message = imap_fetchbody($inbox, $email_number, 1);

$email_address = $overview[0]->from;
$subject = $overview[0]->subject;
$body = $message;
$received_date = date("Y-m-d H:i:s", strtotime($overview[0]->date));

// データベースに保存
$stmt = $pdo->prepare("INSERT INTO emails (email_address, subject, body, received_date) VALUES (?, ?, ?, ?)");
$stmt->execute([$email_address, $subject, $body, $received_date]);
}
}

// IMAPサーバーから切断
imap_close($inbox);

} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}

?>
説明
IMAPサーバーの設定:

$hostname、$username、$passwordを使用してIMAPサーバーに接続します。
データベース接続:

PDOを使用してMySQLデータベースに接続します。
IMAPサーバーに接続:

imap_open関数を使用してIMAPサーバーに接続します。
メールの取得:

imap_search関数を使用して全てのメールを検索し、imap_fetch_overviewおよびimap_fetchbody関数を使用してメールの詳細を取得します。
データベースに保存:

メールの送信者、件名、内容、受信日時をデータベースに挿入します。
IMAPサーバーから切断:

imap_close関数を使用してIMAPサーバーから切断します。
このスクリプトを実行すると、IMAPサーバーからメールを取得し、指定されたデータベーステーブルにメールの情報が保存されます。


POPの場合は難しいですか
ChatGPT
POP3を使用してメールを取得し、データベースに保存するPHPスクリプトも作成できます。POP3の場合、IMAPと異なり、メールのステータスやフォルダを扱う機能はありませんが、メールの受信と内容の取得は可能です。以下にPOP3を使用したサンプルコードを示します。

前提条件
PHP POP3ライブラリ(例:pop3エクステンションや、PEARのNet_POP3パッケージ)がインストールされていること。
データベース(例:MySQL)がセットアップされていること。
データベーステーブルの作成
データベーステーブルはIMAPと同じです。

sql
コードをコピーする
CREATE TABLE emails (
id INT AUTO_INCREMENT PRIMARY KEY,
email_address VARCHAR(255) NOT NULL,
subject VARCHAR(255) NOT NULL,
body TEXT NOT NULL,
received_date DATETIME NOT NULL
);
PHPスクリプト
以下に、POP3サーバーからメールを取得してデータベースに保存するPHPスクリプトのサンプルを示します。ここでは、PEARのNet_POP3を使用します。

php
コードをコピーする
require_once 'Net/POP3.php';

// POP3サーバーの設定
$hostname = 'pop3.example.com';
$username = 'your_email@example.com';
$password = 'your_password';

// データベース接続設定
$dbHost = 'localhost';
$dbName = 'your_database';
$dbUser = 'your_db_user';
$dbPass = 'your_db_password';

try {
// データベース接続
$pdo = new PDO("mysql:host=$dbHost;dbname=$dbName;charset=utf8", $dbUser, $dbPass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// POP3サーバーに接続
$pop3 = new Net_POP3();
$pop3->connect($hostname);
if (!$pop3->login($username, $password)) {
die('Login failed');
}

// メールの取得
$numMessages = $pop3->numMsg();

for ($i = 1; $i <= $numMessages; $i++) {
$headers = $pop3->getParsedHeaders($i);
$body = $pop3->getBody($i);

$email_address = $headers['from'];
$subject = $headers['subject'];
$received_date = date("Y-m-d H:i:s", strtotime($headers['date']));

// データベースに保存
$stmt = $pdo->prepare("INSERT INTO emails (email_address, subject, body, received_date) VALUES (?, ?, ?, ?)");
$stmt->execute([$email_address, $subject, $body, $received_date]);
}

// POP3サーバーから切断
$pop3->disconnect();

} catch (Exception $e) {
echo 'Error: ' . $e->getMessage();
}

?>
説明
POP3サーバーの設定:

$hostname、$username、$passwordを使用してPOP3サーバーに接続します。
データベース接続:

PDOを使用してMySQLデータベースに接続します。
POP3サーバーに接続:

Net_POP3クラスを使用してPOP3サーバーに接続し、ログインします。
メールの取得:

numMsgメソッドを使用して受信メールの数を取得し、各メールのヘッダと本文を取得します。
データベースに保存:

メールの送信者、件名、内容、受信日時をデータベースに挿入します。
POP3サーバーから切断:

disconnectメソッドを使用してPOP3サーバーから切断します。
このスクリプトを実行すると、POP3サーバーからメールを取得し、指定されたデータベーステーブルにメールの情報が保存されます。

Web制作カテゴリーに戻る

1