Кодирование электронной почты PHP?
У меня возникают проблемы с иностранными символами при отправке электронного письма. Может ли кто-нибудь посоветовать мне, что делать? Я подозреваю, что проблема может быть одной из трех вещей.
- Неверная кодировка HTML-страницы. (Повлияет ли это на данные POST из формы?)
- Функция mail не имеет никакой кодировки. Таким образом, программа не знает, как это читать. (Более вероятный)
- Сам файл не имеет правильной кодировки и поэтому создает проблемы. (Вероятно, довольно маловероятно)
Есть ли другие возможные причины?
Я пытаюсь выбить их 1 на 1, пока не найду проблему. Я думаю, что вариант 2 является наиболее вероятной причиной. Как добавить правильную универсальную кодировку в почтовую функцию?
Это то, что у меня есть на данный момент.
$mail_sent = mail($client_email, $title, $message, "From: {$visitor_email}");
В настоящее время я знаю, что форма не отправляет польские или шведские символы.
Я был бы очень признателен, если бы кто-то мог указать на любые другие возможные причины и сказать мне, какую кодировку мне нужно использовать для отправки электронной почты.
Большое спасибо.
Ответы
Ответ 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);