このサイトはPHPを独習する際に作成したスクリプトを基に、プログラム言語初心者のための入門講座として作成しました。PHPは初心者に親しみやすく、解りやすいプログラム言語です。これからプログラムを学ぶ人の参考になればと思います。
14-1 単純なメール送信の仕組み
WEB 上でメールの送信ができることは知っていると思いますが、このメールの送信は form でも簡単に作れますね。 <form action="mailto:アドレス>でメールは送信できます。これはブラウザのメール機能を使っているのです。 しかし、これでは記入項目を確認したりすることはできません。 PHPでメールを送信すれば、自由にさまざまなことが設定できるようになるのです。 まずは単純にメールを送信する方法ですが、これは非常に単純です。mail関数を使うだけなのです。その記述はこれだけ、これでメールが送れちゃうんですね。
mail(アドレス,件名,内容,ヘッダ)
ただ、これだけだとさすが色々と問題が出てくるので、これに付随するいくつかの仕組みが必要になるのです。。
1:$header = "Content-Type: text/plain;charset=¥"iso-2022-jp¥""; 2:mb_language("Japanese"); 言語の種類を設定 3:mb_convert_encoding($subject, "JIS", "EUC-JP"); EUCをJISに変換 4:mb_send_mail($address, $subject,$message, $header); メール送信
1はヘッダの内容です。これはこのままでかまいません。iso-2022-jpがエンコードの種類です。 2〜4に mb_ というものがありますが、これはマルチバイトのこと。マルチバイトとは正確にはマルチバイト文字列と言うべきかな、つまり英語を初めとするアルファベットを使った文字以外の言葉、つまりは日本語なんかのことですね。今はPCを使う場合も何の問題もなく日本語を使っていますが、プログラムの世界で日本語が使えるというのは大変なことなんですね。関数もそれ専用のモノを使うわけです。
メールは当然日本語で書きたいので、日本語が扱えるプログラムを組まなければなりません。上記のmail関数は英語用(シングルバイト)、mb_send_mailは日本語用(マルチバイト)と考えれば大まかには正解です。mail関数は送信ができればtrueを返すのでifと組み合わせれば「送信完了」「送信失敗」のメッセージを出すことができます。 マルチバイトを意識しないで、両方を使えるようにする方法もあるのですが、それはまた次回にしましょう。
マルチバイト文字をPHPで使うためにはすこし設定をしなければなりません。「環境を作ろう」で行ったphp.ini を開き2ヵ所の変更を行います。次の2行なのですが、;セミコロンを消すだけです。上書き保存をしたら Apache を再起動してください。
556 行 ;extension=php_mbstring.dll 1033行 ;mbstring.internal_encoding = EUC-JP
サンプルでは送信先が固定されていますが、form でメールアドレスを入力できるようにすれば、どこにでもメールが送れるようになります。しかし送信者が php.ini に記述されたアドレスになるので、Web に載せるのは危険ですよね。
⇒こんな感じ
メールの件名で文字化けが起こる
メール送信はPHP5に移行後、メールの件名に文字化けが起こるようになりました。解決にかなり時間を要しましたが、なんとか文字化けを解消しました。 上記の解説は以前のままなので、掲載したスクリプトとは違いがあります。修正は追って行います。
これなら文字化けしない
mb_language("Japanese");//日本語に指定 mb_internal_encoding('EUC'); $header = "Content-Type: text/plain;charset="iso-2022-jp""; $address = "宛先アドレス"; $from = "From:差出人アドレス"; $subject = "メールタイトル"; $message = "メール内容"; $subject = mb_convert_encoding($subject, "JIS", "EUC-JP"); $subject = "=?iso-2022-jp?B?".base64_encode($subject)."?="; $message = mb_convert_encoding($message, "JIS", "EUC-JP"); if(mail($address, $subject, $message, $from, $header)){ }
以前メールの文字化けで散々苦労した結果、やっとたどり着いたのがこれです。サイトをEUCで作っているので、ここでもEUCですが、今はUTF-8が主流ですから、書き換えてください。
|