PHP : 受信メールの添付ファイルを保存する
携帯サイトでは、ブログの投稿にメールを使用しているサイトが多いようです。
受信メールから、件名、本文、添付ファイル(画像)を取得する方法をご紹介します。
受信メールから、件名、本文、添付ファイル(画像)を取得する方法をご紹介します。
受信メールを解析する
PEARのMail_mimeDecodeを使用して、受信メールを解析します。
受信メールからのPHPスクリプトの呼び出しは「さくらインターネットで、メール自動返信をする」を参照してください。
- #!/usr/local/bin/php -q
- <?php
- //PEARのパスを設定
- $path = '/home/{さくらアカウント名}/pear/PEAR/';
- set_include_path(get_include_path() . PATH_SEPARATOR . $path);
- require_once 'Mail/mimeDecode.php';
- //受信メールから読み込み
- $params['include_bodies'] = true;
- $params['decode_bodies'] = true;
- $params['decode_headers'] = true;
- $params['input'] = file_get_contents("php://stdin");
- $params['crlf'] = "\r\n";
- if (!$params['input']) {
- // 読み込み失敗
- exit();
- }
- $structure = Mail_mimeDecode::decode($params);
- //送信者のメールアドレスを抽出
- $mail = $structure->headers['from'];
- $mail = addslashes($mail);
- $mail = str_replace('"','',$mail);
- $mail = preg_replace('/(^.*<|>$)/', '', $mail);
- // 件名を取得
- $subject = $structure->headers['subject'];
- // 本文、添付ファイル(画像)を抽出
- switch (strtolower($structure->ctype_primary)) {
- case "text":
- // シングルパート(テキストのみ)
- $body = $structure->body;
- break;
- case "multipart":
- // マルチパート(画像付き)
- foreach ($structure->parts as $part) {
- switch (strtolower($part->ctype_primary)) {
- case "text":
- $body = $part->body;
- break;
- case "image":
- // 画像の拡張子を取得する
- $type = strtolower($part->ctype_secondary);
- // 添付ファイル保存
- $tmpName = '{保存ディレクトリ}/image.' . $type;
- if ($fp = fopen($tmpName, "w")) {
- $length = strlen($part->body);
- fwrite($fp, $part->body, $length);
- fclose($fp);
- }
- break;
- }
- }
- break;
- default:
- $body = "";
- }
- // 取得した情報を、データベースへ保存等の処理を行う
この記事に関連した記事
- さくらインターネットで、メール自動返信をする (2010/01/11)
- 特定の文字の文字化けを回避する (2010/01/19)
- 受信メールの添付ファイルを保存する (2010/01/11)
- さくらインターネットで、メール自動返信をする (2010/01/11)
- DoCoMo端末の場合、URLにguid=ONを自動付与する (2010/01/09)