Проблема с кодировкой в ​​письме и имени при отправке электронной почты в PHP? - PullRequest
3 голосов
/ 24 июня 2011

Что может быть причиной этой проблемы кодирования? Я правильно кодирую информацию заголовка или это может быть вызвано где-то еще?

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

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

$from = '=?UTF-8?B?'.base64_encode($email['from_name']).'?= <'.$email['from_email'].'>';
        $to = '=?UTF-8?B?'.base64_encode($email['to_name']).'?= <'.$email['to_email'].'>';

        $get_param = array( 
                    'Content-Type' => 'text/plain;charset=utf-8',
                    'Content-Transfer-Encoding' => '8bit');

Код выше показывает, как я кодирую информацию в заголовке, а ниже - отправку:

$msg = $message_mime->get($get_param);

        $headers = array (
                'From' => $from,
                'To' => $to,
                'Reply-To' => $from,
                'Subject' => utf8_decode($subject));

        $headers = $message_mime->headers($headers);

        $smtp = Mail::factory('smtp',
            array ('host' => $smtp_settings['host'],
                'auth' => true,
                'username' => $smtp_settings['username'],
                'password' => $smtp_settings['password']));

        $mail = $smtp->send($to, $headers, $msg);

Проблема в том, что полученное письмо было отправлено:

Clientnamé de l'Ontario[=?UTF-8B?QXNzZW1ib(...)=?=]

Спасибо за любую помощь:)

Редактировать: имя клиента в основном использует те же символы, что и выше. Я имею в виду, что электронное письмо должно было быть от "Clientnamé l'Ontario"

1 Ответ

0 голосов
/ 26 апреля 2013

Вы пытались заменить base64_encode на utf8_encode?

Я бы попробовал заменить:

$from = '=?UTF-8?B?'.base64_encode($email['from_name']).'?= <'.$email['from_email'].'>';
$to = '=?UTF-8?B?'.base64_encode($email['to_name']).'?= <'.$email['to_email'].'>';

на:

$email['from_name'] = utf8_encode($email['from_name']);
$email['to_name'] = utf8_encode($email['to_name']);

$from = $email['from_name'].' <' . $email['from_email'] . '>';
$to = $email['to_name']) . ' <' . $email['to_email'] . '>';

Может стоитьпопытка ...

Также может помочь Detection_encoding (http://php.net/mb_detect_encoding/)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...