PHPで絵文字、および、いわゆる「半角カナ」「機種依存文字」入りメールを送信するダーティーハック
mbstring.internal_encoding は UTF-8
Shift_JIS編
$to = 'test@docomo.ne.jp';
$from = 'from@example.jp';
$subject = 'あアア①'.pack('H*', 'EE98BE');
$body = 'あアア①'.pack('H*', 'EE98BE');
$headers = "From: ".$from;
$sendmail_param = "-f".$from;
$subject = '=?shift_jis?B?'.base64_encode(mb_convert_encoding($subject, 'cp932')).'?=';
$body = mb_convert_encoding($body, 'cp932');
mail($to, $subject, $body, $headers, $sendmail_param);
ダーティーなところ。
メールヘッダは78文字毎にCRLFで改行すべき(should)だが、しなければならない(must)じゃないので無視する。
mimeエンコードはクライアントが識別できるShift_JISするが、実際の文字コードはcp932を利用する。
ISO-2022-JP編
$to = ‘test@docomo.ne.jp’; $from = ‘from@example.jp’; $subject = ‘あアア’; $body = ‘あアア’; $headers = “From: “.$from; $sendmail_param = “-f”.$from; $subject = ‘=?iso-2022-jp?B?’.base64_encode(mb_convert_encoding($subject, ‘jis’)).’?=’; $body = mb_convert_encoding($body, ‘jis’); mail($to, $subject, $body, $headers, $sendmail_param);
PHP5.2.1以上の環境ならば「jis」→「iso-2022-jp-ms」にすると①等も送信できる。
カテゴリー: 日記