../../image/benilogo.gifPHPからメールを送信するには


PHP からメールを送信するには。
さて、PHP からメールを送信するにはどのようにすればいいのだろうか?
マニュアル mail関数 mail( ) mb_send_mail( )

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]] )
  1. まずはマニュアルに載っている例文の実行
    ローカル ( LAN ) 内での実験です。 xxxx@xxxx は自分自身の LAN 内での メールアドレス。
    <?php
    echo "mail() のテストです。\n";
    mail("xxxx@xxxxx", "My Subject", "Line 1\nLine 2\nLine 3");
    
    ?>
    
    
    • ローカルでのテストです。

    結果のメール
    Message 1:
    From xxxx@xxxx Sat Jul 02 18:16:32 2005
    Envelope-to: xxxx@xxxx
    To: xxxx@xxxx
    Subject: My Subject
    From: xxxx <xxxx@xxxx>
    Date: Sat, 02 Jul 2005 18:16:32 +0900
    
    Line 1
    Line 2
    Line 3
    
    
    
    • お! ちゃんとメールが返って来ている。

  2. 次に Internet 上 での 実験。
    上記と同じことを インターネットに接続された Server から実行してみる。




      Windows XP の Outlookexpress で受信。
      ちゃんと正常に送信できている。
    Received: from mail14b.xxx.xxxxxxx.xxx (mail14b.xxx.xxxxxxxx.xxx [---.---.---.---])
            by xxxxxx.xxxx.xx.jp (8.9.3/3.7W) with SMTP id OAA22867
            for <xxxxx@xxxx.xx.jp>; Sat, 2 Jul 2005 14:16:55 +0900 (JST)
    From: xxxxx@xxxxx.xxx
    Received: from yyy.xxxxxx.xxx (---.---.---.---)
            by mail14b.xxx.xxxxxxxxx.xxx (RS ver 1.0.95vs) with SMTP id 2-0543201417
            for <xxxxx@xxxxx.xxx>; Sat,  2 Jul 2005 01:16:57 -0400 (EDT)
    Received: (from xxxx@zzzzzzzz)
            by xxxxx.xxx (8.12.11/8.12.9/Submit) id j625GveE012030;
            Sat, 2 Jul 2005 14:16:57 +0900 (JST)
            (envelope-from beniya)
    Date: Sat, 2 Jul 2005 14:16:57 +0900 (JST)
    Message-Id: <200507020516.j625GveE012030@xxxx.xxx>
    To: xxxxxx@xxxxx.xxx
    Subject: My Subject
    X-Loop-Detect: 1
    X-DistLoop-Detect: 1
    Content-Type: text
    X-UIDL: h-Z!!H*?!!fP6!!dO8"!
    
    Line 1
    Line 2
    Line 3
    
    


  3. 次に 日本語は正常に動作するのか?
    日本語の Subject も内容も ちゃんと送られているようです。
    Source  結果メール
    <?php
    echo "mail() のテストです。\n";
    mail("xxxx@xxxx", "私の題", "この中日本語Line 1\nLine 2\nLine 3");
    
    ?>
    
    
    Subject: 私の題
    From: www-data <www-data@xxxx>
    Date: Sat, 02 Jul 2005 18:56:51 +0900
    
    この中日本語Line 1
    Line 2
    Line 3
    
    


  4. ところが実際に メール に送ると 件名は 文字化けする。
    なんで? と思って調べる。
    ヘッダー
    Subject: ・癸シ・・リ、ホシツクウ
    普通にメーラーから送られてきたものは
    Subject: =?iso-2022-jp?B?UmU6IE5ISxskQiU5JVolNyVjJWsbKEI=?= ・・・ とこんなふうにエンコードされている。
    それなら同じような形にするとどうなるのだろうか?
      //
      //--- メールを送る。
      //    タイトルは base64_encode しないと化ける。
      $m_title = "=?iso-2022-jp?B?";
      $m_title .= base64_encode(iconv("EUC-JP","ISO-2022-JP",$_POST['b_title']));
      $m_title .= "?=";
      mail($to_mail,$m_title,$m_msg,$add_header);
    
    
    • "=?iso-2022-jp?B?"
    • ISO-2022-JP に変換
    • base64_encode
    • "?="
    としてやれば伝わるようです。
    と、こんな形にすると
    Subject: =?iso-2022-jp?B?GyRCOiNGfCRPGyhC?= 今日は
    Subject: =?iso-2022-jp?B?GyRCJDMkbCRHRnxLXDhsJEskSiRDJD8hIxsoQg==?= これで日本語になった。

    ちゃんと正常に見えるようです。 この変換だけを行うには mb_encode_mimeheader( )関数 があった。

  5. それから、mail 周りを調べてみるとマルチバイト関数に マニュアルmb_send_mail( ) というのがあった。
    これを使うと簡単。 base64_encode をやってくれる。

    つまりはこんなようなこと。
    このとき mb_language( ) は ja あるいは japanese になっている必要があります。 mb_language("japanese"); とする。
    mb_send_mail() は、emailを送信します。ヘッダと メッセージはmb_language()の設定に基づき変換、 エンコードされます。
    mb_send_mail() は、 mail()のラッパー関数です。詳細は、 mail() を参照ください。


















| 一つ前に戻る |

2005/07/02 start ********* Last Update 2006/11/12 19:05 JST

(C) Y.Kondou,2005,2006 All Rights, Reserved.
その他、お気づきの点がありましたら連絡先はこちらから