二〇〇五年 葉月 一九日(金)
PHP便利な関数 9
少しだけ雨が降りました。香川は相変わらずの水不足。
こんばんは、Miyaです。
さて、本日はメール送信についていくつか。
PHPでは、メール送信も関数が用意されています。
そのおかげで、Perlでメールを送るときのように、sendmailなどのパスを調べる必要がありません。
(これはちょっと嬉しい)
関数のパラメータも、
mail(送信先,サブジェクト,メール本文,[追加ヘッダ,追加パラメータ]);
と大変シンプルなもの。
ただ、この関数はそのまま日本語メールを送ろうとすると文字化けします。
Perlなどでメール送信を行なった時と同じように、サブジェクトをISO-2022-JPへ
変換する必要があります。
(その変換に最適のmb_encode_mimeheaderという関数も準備されています)
そして、日本語メールを送ることを前提とするのであれば、mb_send_mailという関数もあります。
使い方は、mail関数と同じく、
mb_send_mail(送信先,サブジェクト,メール本文,[追加ヘッダ,追加パラメータ]);
でメールが送れるのですが、
mail関数で必要だった文字コードの変換を自動的に行なってくれます。
あくまで「自動判断」なので、誤作動を防ぐには明示的に変換を行なったほうがよいかもしれません。
少し変わったところでは、imap_mailというのもあります。
imap_mail(送信先,サブジェクト,メール本文,[追加ヘッダ,CC,BCC,リターンパス]);
違いといえば、パラメータとしてCC、BCC、リターンパスの指定が出来ることでしょうか。
かといって、mail関数やmb_send_mail関数はCC、BCCなどの設定ができないかというと、ヘッダに直接記述してやれば設定することが出来ます。
Perlでsendmailを使っていた人は、ヘッダに記述するほうが感覚として分かりやすいかも知れませんね。
http://www.gofield.co.jp/mt2/mt-tb.cgi/380
変換といえば・・・
PHPは普通はUTF-8で書きますが、特にWindowsだとやはりSJISが便利です。
しかしSJISだと「フォーム送信で文字化けしやすい」ということと「エスケープ処理で誤動作しやすい」という2大問題がありますよね。
その回避のために、フォーム処理は有名な(?)「あいうえお眉幅」を2重に入れると回避できます。1回では不十分なようです。
エスケープの時には、「そのときだけmb_internal_encodingでUTF-8に切り替え、エスケープ処理が終わるとSJISに戻す」ということをしています。(ちなみに僕は自作エスケープです)
mb_send_mailの変換ミスも、「あいうえお眉幅」で回避できています。
>SKさん
コメントありがとうございます。
WindowsでPHPは本格的にやったことはありませんが、
文字コードでは苦労しそうですね。
その時はぜひ参考にさせていただきます!
Posted by: miya : August 29, 2005 09:28 PM