web-dev-qa-db-ja.com

PHP E-Mail Encoding?

電子メールを送信するときに、外国人のキャラクターに問題があります。誰かが私に何をすべきかアドバイスしてもらえますか?問題は次の3つのいずれかである可能性があります。

  1. Htmlページのエンコードが正しくありません。 (これはPOSTフォームのデータに影響しますか?)
  2. メール機能にはエンコードがありません。したがって、プログラムはそれを読む方法を知りません。 (最も可能性が高い)
  3. ファイル自体には適切なエンコーディングがないため、問題が発生しています。 (おそらくありそうにない)

他に考えられる原因はありますか?

問題が見つかるまで、これらを1つずつノックアウトしようとしています。オプション2が最も可能性の高い原因だと思います。メール機能に適切なユニバーサルエンコーディングを追加するにはどうすればよいですか?

これは私が今持っているものです。

$mail_sent = mail($client_email, $title, $message, "From: {$visitor_email}");

私は現在、フォームがポーランド語やスウェーデン語の文字を送信しないことを認識しています。

誰かが他の考えられる原因を指摘し、電子メールの送信に使用する必要のあるエンコードを教えてくれたら、とても感謝しています。

どうもありがとう。

31
JasonS

私の知る限り、PHPはその文字列のデフォルトエンコーディングとしてUTF-8をサポートしていません。お好みのエンコーディングに関連するエンコーディング/処理関数を使用する必要があります。

また、Content-Type:text/html;charset=utf-8を電子メールヘッダーに追加して、電子メールクライアントが文字を正しく表示するようにします(または選択したエンコードに置き換えます)。

29
Belrog

コンテンツのタイプとエンコードを指定していません。これを試して:

$headerFields = array(
    "From: {$visitor_email}",
    "MIME-Version: 1.0",
    "Content-Type: text/html;charset=utf-8"
);
$mail_sent = mail($client_email, $title, $message, implode("\r\n", $headerFields));
23
Gumbo

このコードを使用

function mail_send($arr)
{
    if (!isset($arr['to_email'], $arr['from_email'], $arr['subject'], $arr['message'])) {
        throw new HelperException('mail(); not all parameters provided.');
    }

    $to      = empty($arr['to_name']) ? $arr['to_email'] : '"' . mb_encode_mimeheader($arr['to_name']) . '" <' . $arr['to_email'] . '>';
    $from    = empty($arr['from_name']) ? $arr['from_email'] : '"' . mb_encode_mimeheader($arr['from_name']) . '" <' . $arr['from_email'] . '>';

    $headers = array
    (
        'MIME-Version: 1.0',
        'Content-Type: text/html; charset="UTF-8";',
        'Content-Transfer-Encoding: 7bit',
        'Date: ' . date('r', $_SERVER['REQUEST_TIME']),
        'Message-ID: <' . $_SERVER['REQUEST_TIME'] . md5($_SERVER['REQUEST_TIME']) . '@' . $_SERVER['SERVER_NAME'] . '>',
        'From: ' . $from,
        'Reply-To: ' . $from,
        'Return-Path: ' . $from,
        'X-Mailer: PHP v' . phpversion(),
        'X-Originating-IP: ' . $_SERVER['SERVER_ADDR'],
    );

    mail($to, '=?UTF-8?B?' . base64_encode($arr['subject']) . '?=', $arr['message'], implode("\n", $headers));
}

from: http://php.net/manual/en/function.mail.php

10
Yanni

前述の内容に加えて、UTF-8を使用できるようにHTMLでメールを送信することは必須ではありません。また、ヘッダーで単純なテキストとしてフォーマットすることもできます。

'Content-Type: text/plain;charset=utf-8'
8
teemoo

次のコードを使用します。

  $text = "";
  $text .= "<html>\n";
  $text .= "<body style=\"font-family:Arial; \">\n";

  $text .= "<b>Add Your text here . . .</b>";
  $text .= date("d.m.Y") . " <br><br>\n\n";

  $text .= "</body>\n";
  $text .= "</html>\n";

$headers = 'From: ' . $myEmail . "\r\n";
$headers .= 'To: ' . $depEmail . "\r\n";    
$headers .= 'Return-Path: ' . $myEmail . "\r\n";
$headers .= 'MIME-Version: 1.0' ."\r\n";
$headers .= 'Content-Type: text/HTML; charset=ISO-8859-1' . "\r\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\r\n";
$headers .= $text . "\r\n";

set_time_limit(30);
if (!mail('', 'Demande information', '', $headers)) {
  Alert(...)
4
Atara

PHPメールラッパーを使用すると、正気が保たれます(ここでの経験から言えば)。たとえば、 PHPMailer を使用すると、送信メールのエンコードを設定し、あなたへのメッセージ。

また、UTF-8を使用します。最近ではほぼ全世界でサポートされており、必要なすべてのキャラクターをカバーしています。

2
Piskvor

このコードを使用して、古いHordeメールのギリシャ語エンコードの問題を解決します。

$headers = 'From: ' . $youremail . "\r\n";
$headers .= 'To: ' . $to . "\r\n";    
$headers .= 'Return-Path: ' . $youremail . "\r\n";
$headers .= 'MIME-Version: 1.0' ."\r\n";
$headers .= 'Content-Type: text/HTML; charset=utf-8' . "\r\n";
$headers .= 'Content-Transfer-Encoding: 8bit'. "\n\r\n";
$headers .= $message . "\r\n";

mail('', 'Request from Site yoursite', '', $headers);
1
isboleas