При отправке электронной почты у меня возникают проблемы с иностранными символами. Может кто-нибудь посоветует мне, что делать. Я думаю, что проблема может быть одной из трех.
1) Недопустимая кодировка html-страницы. (Это повлияет на данные POST из формы?) 2) Функция почты не имеет никакой кодировки. Таким образом, программа не знает, как ее читать. (Скорее всего) 3) Сам файл не имеет правильной кодировки и, таким образом, создает проблемы. (Вероятно, маловероятно)
Есть ли другие возможные причины?
Я пытаюсь выбить их 1 к 1, пока не найду проблему. Я думаю, что вариант 2 является наиболее вероятной причиной. Как добавить правильную универсальную кодировку в почтовую функцию?
Это то, что у меня есть на данный момент.
$mail_sent = mail($client_email, $title, $message, "From: {$visitor_email}");
В настоящее время я знаю, что форма не отправляет польских или шведских символов.
Я был бы очень признателен, если бы кто-нибудь мог указать на любые другие возможные причины и сказать мне, какую кодировку мне нужно использовать для отправки электронной почты.
Большое спасибо.
Насколько я знаю, PHP не поддерживает UTF-8 в качестве кодировки по умолчанию для своих строк. Вам необходимо использовать соответствующие функции кодирования / обработки для кодирования, которые вы предпочитаете.
Также добавьте «Content-Type: text / html; charset = utf-8» в свои заголовки электронной почты, чтобы клиенты электронной почты отображали символы правильно (или заменяли вашу кодировку по выбору).
Вы не указали тип и кодировку вашего контента. Попробуй это:
$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));
В дополнение к тому, что было сказано ранее, необязательно отправлять почту в HTML, чтобы иметь возможность использовать UTF-8, вы также можете отформатировать ее как простой текст в заголовках:
'Content-Type: text/plain;charset=utf-8'
Используйте этот код
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)); }
Я использую следующий код:
$text = ""; $text .= "<html>\n"; $text .= "<body style=\"font-family:Arial; \">\n"; $text .= "<b>Add Your text here . . .</b>"; $text .= date("dmY") . " <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(...)
Используйте почтовую оболочку PHP, это спасет ваше здравомыслие (исходя из опыта здесь). Например, PHPMailer позволяет вам устанавливать исходящую кодировку электронной почты и создает для вас сообщение.
Также используйте UTF-8; это почти повсеместно поддерживается в наши дни и охватывает все персонажи, которые вам когда-либо понадобятся.
Я использую этот код для решения проблемы с греческим кодированием в старой почте Орды.
$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);