DoCoMo宛のメールの送り方
通常、PHP からメールを送る際には、mail 関数や mb_send_mail 関数を使えば簡単にメールを送信することができます。ですが、DoCoMo宛に絵文字を使ったメールを送る際、必ずといってイイほど文字化けが発生します。
今回はその文字化けを発生させないための方法について解説いたします。
base64_encode()とmb_convert_encoding()を使う
mail 関数で絵文字ををそのまま送信すると〓(げたと読む)になったり?になったりします。そこで、base64_encodeを使います。
base64_encode()とは、 base64方式によるデータのエンコード、すなわち、 メールに画像などのバイナリデータを添付する際に、中身を文字列(テキスト)データに置換し、メールにはテキストデータしか載せられないため、画像や音声、ワープロ文書などのバイナリファイルは、そのままでは送受信できない。このため、送信時に一定のルールに従ってデータを文字列に置換し、受信した後に元のデータにもどるという手法を行うための関数です。メール自体、文字(テキストデータ)しか送ることができないのです。
そこであえて、文字であるにもかかわらず、絵文字付きメールのサブジェクトや本文をbase64_encode()にさせることにより、別の文字列に変えさせ、一般的なメールで用いられるISO-2022-JPに置換させてから送信することで、文字化けを防ぐことができます。PHP のコードにすると以下の様になります。
$subject = "(ハート絵文字)人生鬱だよね(ハート絵文字);
$subject = base64_encode($subject); //いったんbase64エンコード化
$subject = mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS");//ISO-2022-JP化
$subject = "=?ISO-2022-JP?B?" . $subject . "=?=";
$body = "(馬の絵文字)ひひーん。明日からワラだけの生活だYO!!";
$body = base64_encode($body);
$body = mb_convert_encoding($subject,"ISO-2022-JP","Shift_JIS");
DoCoMo用のエンコードの次にすること(ヘッダ設定)
上述のとおり、エンコードが終わった後に、今度は、メールのヘッダにこのメールの特色を明記する必要があります。以下の通りにヘッダを設定してください。
//このメールアドレスは自分のメールアドレスに変更してください。
$header = "From: foobar@nobody.ltd\r\n";
$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: text/plain;charset=ISO-2022-JP\r\n";
$header .= "Content-Transfer-Encoding: base64";
ドコモ宛にPHPからメールを送信
日本語でメールを送る場合には、通常以下の様なプログラムを使います。
念のため、下の $mailto は メール送信先のアドレスが格納された変数です。適宜適応してください。
mb_language("ja");
mb_send_mail($mailto,$subject,$body,$header);
しかし、この場合、せっかく設定したヘッダの部分と重なったり異なる命令になる場合がありますので、ここでは通常の mail()関数を用います。
$success = @mail($mailto,$subject,$body,$header);
if($success) print "送信成功";
else print "送信失敗";
これでDoCoMo宛の絵文字付きメールも送ることができると思います。また、この方法は一部キャリアでも有効ですので、ご確認ください。
