簡體   English   中英

在PHP中發送電子郵件時,來自電子郵件和名稱的編碼問題?

[英]Encoding problem in From email and name when sending email in PHP?

什么可能導致這種編碼問題? 我是否正確編碼標題信息或者是否可能在其他地方引起?

我在這里發現了一個類似的問題: 來自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édel'Ontario”

您是否嘗試使用utf8_encode替換base64_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'] . '>';

也許值得嘗試一下...

detect_encoding也可以提供幫助( http://php.net/mb_detect_encoding/ )?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM