「PHPのPEAR」のマルチパートメール環境づくり
電子メール形式の概要と「PHPのPEAR」のマルチパートメール環境づくり
電子メール形式の概要とマルチパート※画像クリックで拡大表示(リンク)
- 電子メール形式の概要
電子メール形式(インターネットメッセージのフォーマット)は、「RFC2822」の標準規格があります。
- ヘッダー部のコードとMIME
ヘッダー部は、7bitコードのASCII形式であるので、[Subject],[From]などに日本語を利用する場合は、「B」encodingが一般的です。
・「B」encoding:Base64のエンコーディング(日本語での利用)
・「Q」encoding:quoted-printableのエンコーディング(欧文での利用が多い)
使われ方は、「Subject」が多く、「From」の日本語名つきで表示するメールアドレスなどにも使われます。
「Subject:
=?ISO-2022-JP?B?GyRCJEYkOSRIIzEbKEI=?=」は、「てすと1」をJISコードにBase64エンコーディングを適用した例です。 - 本文のコードとMIME
インターネットの転送データ上では、日本語の本文は、7bitのJISコードである「ISO-2022-JP」が使われ、メールソフトでは、インターネットの転送(送受信)で「ISO-2022-JP」に変換されて実行されます。
「これはメール送信のテストです。」の本文を「ISO-2022-JP」に変換すると"$3%a!<%kAw?.%F%9%H$9!# (B"となります。
【 電子メールのヘッダー構成 】 フィールド名 内容 Return-Path: エンベロープのMail Fromの内容 Received: サーバーの経路情報 Message-ID: メールの個別識別するためのID Date: メールを送信するタイミングの日時 Subject: 件名(主題) To: 送り先のメールアドレス From: 送信元のメールアドレス Cc: 送り先と同じ内容(カーボン・コピーの略)を送るメールアドレス Bcc: 送り先と同じ内容(ブラインド・カーボン・コピーの略)を送るメールアドレスで、他の送信相手には隠される Content-Type: 本文のコンテンツの種類 Content-Transfer-Encoding: エンコーディング方式(ASCIIコードは 7bit、日本語・バイナリは BASE64) - ヘッダー部のコードとMIME
- 電子メールのマルチパート形式
通常のテキスト形式のみの電子メールでは、上記のような形式ですが、HTMLメール形式とテキストプレーン形式を受信者側での選択する「Alternative」や添付ファイル「Attachment」の場合には、「マルチパート」形式となります。
各パートは、区切り行「boundary」が指定されて区別されます。
※受信メールを添付ファイルとして転送するなどの場合、ファイルの拡張子は一般的に「eml」が利用されます。
マルチパートの電子メールのサンプルデータ:「mail_multipart_sample.eml」のダウンロード
マルチパートのメール環境づくり
マルチパートの電子メールは、「PHPのPEAR」の「mail」と「mail_mime」のライブラリを利用することで実現できます。
- PEARによる「mail」を検索してインストール
「pear search mail」をコマンドプロンプトから入力。
C:¥PHP>pear search mail Retrieving data...0% ....50%....MATCHED PACKAGES, CHANNEL PEAR.PHP.NET: ======================================= PACKAGE STABLE/(LATEST) LOCAL Mail 1.2.0 (stable) Class that provides ... ... Mail_Mime 1.8.9 (stable) Mail_Mime provides ... ... C:¥PHP>
- PEARによる「mail」のインストール
「pear install -a mail」をコマンドプロンプトから入力。「-a」は、関連するモジュールもインストールを意味します。
C:¥PHP>pear install -a mail downloading Mail-1.2.0.tgz ... Starting to download Mail-1.2.0.tgz (23,214 bytes) ........done: 23,214 bytes downloading Net_SMTP-1.6.2.tgz ... Starting to download Net_SMTP-1.6.2.tgz ... ...done: 13,077 bytes downloading Net_Socket-1.0.14.tgz ... Starting to download Net_Socket-1.0.14.tgz ... ...done: 5,600 bytes downloading Auth_SASL-1.0.6.tgz ... Starting to download Auth_SASL-1.0.6.tgz ... ...done: 9,119 bytes install ok: channel://pear.php.net/Mail-1.2.0 install ok: channel://pear.php.net/Net_Socket-1.0.14 install ok: channel://pear.php.net/Auth_SASL-1.0.6 install ok: channel://pear.php.net/Net_SMTP-1.6.2 C:¥PHP>
「Mail」「Auth_SASL」「Net_SMTP」「Net_Socket」がインストールされました。 - PEARによる「mail_mime」のインストール
「pear install mail_mime」をコマンドプロンプトから入力して、「Mail_Mime」をインストールします。
C:¥PHP>pear install mail_mime downloading Mail_Mime-1.8.9.tgz ... Starting to download Mail_Mime-1.8.9.tgz ... .........done: 33,796 bytes install ok: channel://pear.php.net/Mail_Mime-1.8.9 C:¥PHP>
マルチパートのメール送信には、「Mail_Mime」を利用して、テキストメール、HTMLメール、添付ファイルの指定ができます。 - 「pear list」によるmail関連のインストール確認
C:¥PHP>pear list INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET: ========================================= PACKAGE VERSION STATE ... Auth_SASL 1.0.6 stable ... Mail 1.2.0 stable Mail_Mime 1.8.9 stable Net_SMTP 1.6.2 stable Net_Socket 1.0.14 stable ... C:¥PHP>
- メールの送信方法(PEARのMailマニュアル参照)
[1] 「Mail」の新規インスタンスのfactory()メソッドを有するバックエンドを作成します。(3種類のバックエンド)
・mail … PHP の組込関数 mail() を使用して送信
・sendmail … sendmail プログラムにより送信
・smtp … SMTP サーバに直接接続してメールを送信
[2] 作成したインスタンスに、 send() メソッドを用いてメール送信します。 - 電子メールのマルチパート形式のPHPプログラム作成については、「メールサーバーとPHP連携プログラミング」を参照下さい。