apice-technologymemorandum
投稿日時:2024/06/03
メールで取得したデータをシステムが受けて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サーバーからメールを取得し、指定されたデータベーステーブルにメールの情報が保存されます。