WEBデザイン・開発講義WEB Design&Development Lecture

「PHPのPEAR」のマルチパートメール環境づくり

「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)
  • 電子メールのマルチパート形式
    通常のテキスト形式のみの電子メールでは、上記のような形式ですが、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連携プログラミング」を参照下さい。

PHPプログラミング補足説明

PHPリファレンス

参考資料の表示

pagetopへ