Подтвердить что ты не робот

Кодирование электронной почты PHP?

У меня возникают проблемы с иностранными символами при отправке электронного письма. Может ли кто-нибудь посоветовать мне, что делать? Я подозреваю, что проблема может быть одной из трех вещей.

  1. Неверная кодировка HTML-страницы. (Повлияет ли это на данные POST из формы?)
  2. Функция mail не имеет никакой кодировки. Таким образом, программа не знает, как это читать. (Более вероятный)
  3. Сам файл не имеет правильной кодировки и поэтому создает проблемы. (Вероятно, довольно маловероятно)

Есть ли другие возможные причины?

Я пытаюсь выбить их 1 на 1, пока не найду проблему. Я думаю, что вариант 2 является наиболее вероятной причиной. Как добавить правильную универсальную кодировку в почтовую функцию?

Это то, что у меня есть на данный момент.

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

В настоящее время я знаю, что форма не отправляет польские или шведские символы.

Я был бы очень признателен, если бы кто-то мог указать на любые другие возможные причины и сказать мне, какую кодировку мне нужно использовать для отправки электронной почты.

Большое спасибо.

4b9b3361

Ответ 1

Насколько я знаю, PHP не поддерживает UTF-8 в качестве кодировки по умолчанию для своих строк. Вам необходимо использовать соответствующие функции кодирования/обработки для кодировки, которую вы предпочитаете.

Также добавьте Content-Type:text/html;charset=utf-8 к заголовкам вашей электронной почты, чтобы почтовые клиенты правильно отображали символы (или заменяли выбранной вами кодировкой).

Ответ 2

Вы не указали тип и кодировку вашего контента. Попробуйте следующее:

$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));

Ответ 3

Используйте этот код

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));
}

от: http://php.net/manual/en/function.mail.php

Ответ 4

В дополнение к тому, что было сказано ранее, необязательно отправлять почту в HTML, чтобы иметь возможность использовать UTF-8, вы также можете отформатировать ее как простой текст в заголовках:

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

Ответ 5

Я использую следующий код:

  $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(...)

Ответ 6

Используйте почтовую оболочку PHP, это спасет ваше здравомыслие (исходя из опыта здесь). Например, PHPMailer позволяет вам устанавливать исходящую кодировку электронной почты и создает для вас сообщение.

Кроме того, используйте UTF-8; он почти повсеместно поддерживается в наши дни и охватывает все персонажи, которые вам когда-либо понадобились.

Ответ 7

Я использую этот код для решения проблемы с греческим кодированием в старой почте Орды.

$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);