Sabel_Mail_MimeDecode はソースを解析し、ヘッダ・件名・本文や添付画像、HTMLパートなどを取り出すことを可能にします。Outlook や Outlook Express、Thunderbird や携帯から送信される一般的なメール形式の多くに対応しています。
※解析可能な形式はページ
下部で説明しています。
解析の方法は簡単で、decode()メソッド にメールソースを渡すだけです。decode()メソッド の返り値のメールオブジェクトから取得できる件名や本文などは、自動的に内部エンコーディングに変換されます。
$decoder = new Sabel_Mail_MimeDecode();
$mail = $decoder->decode(file_get_contents("/path/to/test.eml"));
ヘッダの内容は getHeader()メソッド により取得することができます。大文字、小文字は気にする必要はありません。
echo $mail->getHeader("Message-ID");
echo $mail->getHeader("Date");
------------------------------------------------
echo $mail->getHeader("message-id"); // ok
echo $mail->getHeader("date"); // ok
件名は getSubject()、もしくは件名はヘッダに含まれるものなので getHeader() でも取得することが可能です。
echo $mail->getSubject();
------------------------------------------------
echo $mail->getHeader("Subject");
本文を取得するには body にアクセスしてください。これは本文テキストではなく、Partオブジェクト となります。Partオブジェクト からはMIMEタイプや文字セット、エンコーディングなども取得することができます。
if ($body = $mail->body) {
echo $body->getContent(); // Body text
echo $body->getType(); // MIME Type
echo $body->getCharset(); // Charset
echo $body->getEncoding(); // Encoding
}
HTMLパートしか無いような特殊ケースもあるため、どちらかを本文として取得できれば良いのであれば、以下のようにコーディングすることができます。
$bodyText = "";
if ($mail->body) {
$bodyText = $mail->body->getContent();
} elseif ($mail->html) {
$bodyText = $mail->html->getContent();
}
echo $bodyText;
添付ファイルは attachments から取得することができます。getContent()メソッド で取得できるファイルデータは Base64エンコード、または QuotedPrintableエンコード からデコードされたバイナリデータに復元されています。
if ($mail->attachments) {
foreach ($mail->attachments as $attachment) {
echo $attachment->getName(); // file name
echo $attachment->getType(); // mime type
echo $attachment->getContent(); // binary data
}
}
HTMLパートはインライン画像を保持しているかもしれません。そのインライン画像は、getImages()メソッド により取得することができます。
if ($mail->html) {
echo $mail->html->getContent(); // html text
foreach ($mail->html->getImages() as $image) {
echo $image["cid"]; // contents id
echo $image["mimetype"]; // mime type
echo $image["data"]; // binary data
}
}
1. 本文
[本文]
2. HTMLメール
[HTML]
3. 本文 + HTMLメール
multipart/alternative
[本文]
[HTML]
4. HTMLメール(インライン画像有)
multipart/related
[HTML]
[インライン画像]
...
5. HTMLメール + 添付ファイル
multipart/mixed
multipart/related
[HTML]
[インライン画像]
...
[添付ファイル]
...
6. 本文 + HTMLメール(インライン画像有)
multipart/alternative
[本文]
multipart/related
[HTML]
[インライン画像]
...
7. 本文 + HTMLメール(インライン画像有)
multipart/related
multipart/alternative
[本文]
[HTML]
[インライン画像]
...
8. 本文 + HTMLメール + 添付ファイル
multipart/mixed
multipart/alternative
[本文]
[HTML]
[添付ファイル]
...
9. 本文 + HTMLメール(インライン画像有) + 添付ファイル
multipart/mixed
multipart/alternative
[本文]
multipart/related
[HTML]
[インライン画像]
...
[添付ファイル]
...
10. 本文 + HTMLメール(インライン画像有) + 添付ファイル
multipart/mixed
multipart/related
multipart/alternative
[本文]
[HTML]
[インライン画像]
...
[添付ファイル]
...
11. ダイジェスト
multipart/digest
message/rfc822
[上記のいずれかの形式]
...
12. 本文 + ダイジェスト + 添付ファイル
multipart/mixed
[本文]
multipart/digest
message/rfc822
[上記のいずれかの形式]
...
[添付ファイル]
...
関連項目