web-dev-qa-db-ja.com

UTF-8電子メールを送信する方法は?

メールを送信するときに、英語以外の文字がメールに表示されません。以下のように表示されます。

余生ä"ä"

実際に何がこれを引き起こすのか知っていますか?スクリプトにContent-typeとcharsetを追加しようとしても、まだ同じように表示されます。

Mail::Factory("mail");を使用しました

72
deepWebMie

ヘッダー「Content-Type:text/html; charset = UTF-8」をメッセージ本文に追加できます。

$headers = "Content-Type: text/html; charset=UTF-8";

ネイティブmail()関数を使用する場合、$ headers配列は4番目のパラメーターmail($to, $subject, $message, $headers)になります

PEAR Mail :: factory()コードを使用する場合:

$smtp = Mail::factory('smtp', $params);

$mail = $smtp->send($to, $headers, $body);
103
s.webbandit

すべてのメールシステム(たとえば: http://10minutemail.com )がUTF-8メールを読み取れるわけではないため、むしろ指定された文字セット(ISO-8859-2)を使用しています。これが必要な場合:

function utf8_to_latin2($str)
{
    return iconv ( 'utf-8', 'ISO-8859-2' , $str );
}
function my_mail($to,$s,$text,$form, $reply)
    {
        mail($to,utf8_to_latin2($s),utf8_to_latin2($text),
        "From: $form\r\n".
        "Reply-To: $reply\r\n".
        "X-Mailer: PHP/" . phpversion());
    }

Appleデバイスは前のバージョンをうまく読み込めなかったため、別のメーラー関数を作成しました。

function utf8mail($to,$s,$body,$from_name="x",$from_a = "[email protected]", $reply="[email protected]")
{
    $s= "=?utf-8?b?".base64_encode($s)."?=";
    $headers = "MIME-Version: 1.0\r\n";
    $headers.= "From: =?utf-8?b?".base64_encode($from_name)."?= <".$from_a.">\r\n";
    $headers.= "Content-Type: text/plain;charset=utf-8\r\n";
    $headers.= "Reply-To: $reply\r\n";  
    $headers.= "X-Mailer: PHP/" . phpversion();
    mail($to, $s, $body, $headers);
}
31
user669677