マイム
コア: メソッド
MIME ヘッダーの生成、MIME セグメント ヘッダーの生成、および最終的な電子メール メッセージの生成をいくつかのモジュールに分割します。このメソッドの実装は、前に説明した MIME の基本から直接得られます。
functionattach($data, $description = "", $contenttype = OCTET,
$encoding = BASE64, $disp = '') {
if (empty($data))
return 0 ;
if (trim($contenttype) == '')
$contenttype = OCTET ;
if (trim($encoding) == '')
$encoding =
if ($encoding == BIT7) emsg = $data;
elseif ($encoding == QP)
$emsg = $$this->qp_func($data);
elseif ($encoding == BASE64) {
if (!$this->base64_func) ) # ユーザー定義関数があるかどうかを確認します
$emsg =base64_encode($data);
else
$emsg = $$this->base64_func($data);
$emsg = chunk_split($emsg); ;
//content-type が text/plain かどうかを確認し、charset が指定されていない場合は、デフォルトの CHARSET を追加します
if (preg_match("!^".TEXT."!i", $contenttype) &&
!preg_match(" !; charset=!i", $contenttype))
$contenttype .= ";
charset=".CHARSET ;
$msg = sprintf("Content-Type: %sContent-Transfer-Encoding: %s%s%s %s ",
$contenttype.CRLF,
$encoding.CRLF,
((($description) && (BODY != $description))?"Content-Description:
$description".CRLF:""),
($ disp?"Content-Disposition: $disp".CRLF:""),
CRLF.$emsg.CRLF); $this->mimeparts[0] = $msg: $this -> ;mimeparts[] = $msg
;
return sizeof($this->mimeparts);
?> このメソッドを詳しく見てみましょう (他のほとんどのメソッドも同様です)。
このメソッドで使用されるパラメータは次のとおりです:
添付された実際のデータ ($data)
Content-Description ヘッダーに対応するデータの説明 ($description)
Content-Type ヘッダーで使用されるデータのコンテンツ タイプの値($ contenttype)
Content-Transfer-Encoding で使用されるエンコード値 ($encoding)
Content-Disposition ヘッダー $disp で使用されるレイアウト値 (INLINE または ATTACH にすることができます)、どちらも定数です
BASE64、TEXT 値、などは、添付の .def ファイルに定数として定義されています。
$encoding 値を使用して、データのエンコードにどのエンコード方法を使用する必要があるかを決定します。有効な値は、BIT7 (または 7bit)、QP、または BASE64 です。
この関数は、ユーザーが独自の BASE64 関数または QP 関数を使用したいかどうかもチェックします。この記事の執筆時点では、BIT7 と BASE64 のみがクラス
に実装されていますが、前に説明した $qp_func クラス変数
を介して、独自の quote-printable
関数を渡して使用することができます。
エンコードプロセスの後、エンコードされた情報に対して chunk_split() が使用されていることがわかります。この関数は、オプションの長さに基づいて文字列をより小さなセグメントに分割します。長さを指定しなかったため、デフォルトの長さは 76 です。これはメール処理の習慣に非常に適しています。
次に、$contenttype パラメータに text/plain が含まれる場合、「charset=」
パラメータの値を指定する必要があります。そのデフォルト値は、定数 CHARSET 内で値 us-ascii で定義されています
。ヘッダーがパラメーター値によって渡される場合、ヘッダーとパラメーターの間にセミコロン (;) が必要であることに注意してください。
例: Content-Type: text/plain; charset=us-ascii
他の MIME セクション ヘッダーのそれぞれの値がこのメソッドに渡されると、これらのセクション ヘッダーが作成されます。結局のところ、説明のない
Content-Description ヘッダーは使いたくないのです。これらのヘッダーを作成した後、情報のエンコードされたデータ部分を追加します。 (メソッド
の sprintf() ステートメントを確認してください)。
もう一度、BODY という特別な説明フィールド (これも定数) を使用していることに注意してください。これはクラスの実装で使用するものです。
説明フィールドが BODY と同じ場合、それを $mimeheaders 配列の最初の要素に割り当てます。これを何度か読んでください。
attach() は、呼び出し元のスクリプトへの参照で使用される $mimeparts 配列の現在のサイズを返します。このようにして、添付ファイル「X」がどのインデックスに存在するかを知ることができます (実際の戻り値は配列内のインデックスより 1 小さい値です)。すべてのヘッダーは CRLF (
) シーケンスで終わる必要があることに注意してください。
次に、fattach() メソッドを見てみましょう。 fattach() はattach() に似ていますが、最初の
パラメータとして (attach() の $data の代わりに) ファイル名を使用します。このメソッドは、呼び出し元がファイルを使用して fattach を呼び出すことができるようにするための単なるラッパーです。
fattach() はファイルを読み取り、attach() を呼び出してデータを追加します。このメソッドは失敗した場合は 0 を返します。説明は $errstr
変数
で見つけることができます。成功した場合は、$mimeparts 配列内の添付ファイルのインデックス番号を返します。
データを追加し、エンコードして、個々の MIME セグメントをプライベート配列に配置する機能を開発しました。まだ完了する必要がある作業は次のとおりです:
MIME の各セグメントを完了する
MIME ヘッダー、電子メールの元のヘッダー (To:、From: など)、およびユーザー定義の
ヘッダーを含む電子メール ヘッダーを作成します。
完全な電子メール パッケージが生成されるように、ヘッダーの後に完全な MIME セグメントを追加します。