PHPのmail()で日本語メール

PHPのマニュアルにあった方法。
mb_send_mail()を使わず、mail()を使っている。
ポイントは、ヘッダーの中の<>以外の部分のみ、mb_convert_encodingでISO2022変換してから、
mb_encode_mimeheader()をしている。
その他の、$bodyや$subjectはmb_convert_encoding()をしている。
mb_send_mailのヘッダー部分でハマったので、今後はこっちで行こうかと思う。

mail()での発見
-headerは省略可、一番簡単な形であれば件名、本体、宛先だけでも送信可能。
-ヘッダー部分をいじってhtmlメールも送信可能。実際はPEARを使った方が良いようだ。

/**
* @name : sendMail
* @author Taslim Mazumder Sohel
* @mailsohel62@yahoo.com
* Function for sending email
*with Japanese Email Body, Subject, Sender Name.
*
* @param String $to : Receiver mail address.
* @param String $subject : email subject.
* @param int $body : mail body text.
* @param array $from_email : Sender mail address.
* @param array $from_name : Sender Name.
*
*/
function sendMail($to, $subject, $body, $from_email,$from_name)
{
$headers = “MIME-Version: 1.0 \n” ;
$headers .= “From: ” .
“”.mb_encode_mimeheader (mb_convert_encoding($from_name,”ISO-2022-JP”,”AUTO”)) .”” .
“<".$from_email."> \n”;
$headers .= “Reply-To: ” .
“”.mb_encode_mimeheader (mb_convert_encoding($from_name,”ISO-2022-JP”,”AUTO”)) .”” .
“<".$from_email."> \n”;

$headers .= “Content-Type: text/plain;charset=ISO-2022-JP \n”;

/* Convert body to same encoding as stated
in Content-Type header above */

$body = mb_convert_encoding($body, “ISO-2022-JP”,”AUTO”);

/* Mail, optional paramiters. */
$sendmail_params = “-f$from_email”;

mb_language(“ja”);
$subject = mb_convert_encoding($subject, “ISO-2022-JP”,”AUTO”);
$subject = mb_encode_mimeheader($subject);

$result = mail($to, $subject, $body, $headers, $sendmail_params);

return $result;
}

ちなみにmb_send_mail()については

mb_send_mail(“example@example.com”, “テストメール”, “これはテストです。”, “From: from@example.com”);

これが一番シンプルな使い方で、ヘッダーにはエンコードすべき文字列(つまり日本語)がないので、エンコード系のコマンドは使われていない。他のパラメータも自前エンコーディングが必要ないような書き方がマニュアルにはされているが、不安だ。

コメント

タイトルとURLをコピーしました