2013-12-17 18 views
0

最近我一直在通過我的網站發送電子郵件時遇到一些大問題,因爲它似乎總是顯示電子郵件客戶端的主要編碼差異。由於它幾乎總是適用於Gmail和其他版本,所以在Hotmail/Outlook上,郵件標題/主題中總是會出現UTF8錯誤。我嘗試編碼/解碼幾個變量以防止發生這種情況,但是每個解決方案最終都會產生錯誤。PHP郵件函數在hotmail/outlook中返回utf8錯誤

這裏的功能,通過形式發送電子郵件:

function enviarEmail($nomeRemetente = '', $emailRemetente = '[email protected]', $emailDestinatario = '[email protected]', $emailResposta = '[email protected]', $assunto = '', $campos = array(), $dados = array(), $customMsg = false, $mensagemHTML = '') 
{ 
    $retorno = true; 
    $quebra_linha = "\n"; 
    if (PHP_OS == 'Linux') { 
     $quebra_linha = "\n"; 
    } elseif (PHP_OS == 'WINNT') { 
     $quebra_linha = "\r\n"; 
    } 

    if (!$customMsg) { 
     $mensagemHTML = '<table width="490" border="0" cellpadding="0" cellspacing="6"> 
       <tr> 
        <td colspan="2"> 
         <p style="font-size: 14px; font-family: Arial, Helvetica, sans-serif; color: #A93118;">..: ' . $assunto . '</p> 
         <p>Formul&aacute;rio preenchido em ' . date('d/m/Y') . ' as ' . date('H:i') . '</p> 
        </td> 
       </tr> 
       '; 
     $qtde = count($campos); 
     for ($i = 0; $i < $qtde; $i++) { 
      $mensagemHTML .= ' 
       <tr> 
        <td align="right"><strong>' . $campos[$i] . ': </strong></td> 
        <td>' . $dados[$i] . '</td> 
       </tr> 
       '; 
     } 
     $mensagemHTML .= '</table>'; 
    } 

    $headers = implode($quebra_linha, # 
       array('MIME-Version: 1.1', # 
        'Content-type: text/html; charset=utf-8', # 
        'From: ' . html_entity_decode($nomeRemetente) . ' <' . $emailRemetente . '>', # 
        'Return-Path: ' . utf8_decode($nomeRemetente) . ' <' . $emailRemetente . '>', # 
        'Reply-To: ' . $emailResposta, # 
        'Subject: ' . $assunto, # 
        'X-Priority: 3' 
      )); 

    $emailDestinatario = is_array($emailDestinatario) ? $emailDestinatario : array($emailDestinatario); 
    foreach ($emailDestinatario as $emailDestino) { 
     mail($emailDestino, $assunto, $mensagemHTML, $headers) or $retorno = false;// die('Erro no servidor!'); 
    } 
    return $retorno; 
} 

而這個功能在這裏稱爲:

function enviarContato() 
{ 
    $nomeRemetente = PROJECT_SHORT_TITLE; 
    $emailRemetente = $emailResposta = PROJECT_EMAIL; 

    $subject = 'Contato no site Modelo Site Rápido - ' . date('d/m/Y H:i:s'); 

    $emailDestinatario = array('[email protected]'/*, PROJECT_EMAIL*/); 

    $campos = array(); 
    $dados = array(); 

    $campos[] = 'Nome'; 
    $dados[] = isset($_REQUEST['contatoNome']) ? $_REQUEST['contatoNome'] : ''; 

    $campos[] = 'Email'; 
    $emailResposta = $dados[] = isset($_REQUEST['contatoEmail']) ? $_REQUEST['contatoEmail'] : ''; 

    $campos[] = 'Telefone'; 
    $dados[] = isset($_REQUEST['contatoTelCel']) ? htmlspecialchars($_REQUEST['contatoTelCel'], ENT_COMPAT, 'UTF-8') : ''; 

    $campos[] = 'Mensagem'; 
    $dados[] = isset($_REQUEST['contatoMensagem']) ? nl2br(stripcslashes($_REQUEST['contatoMensagem'])) : ''; 

    $conf = enviarEmail($nomeRemetente, $emailRemetente, $emailDestinatario, $emailResposta, utf8_decode($subject), $campos, $dados); 

$link = 'http://' . PROJECT_URL . '/contato.php'; // usado sem mod_rewrite 
if (isset($MG_MR_Settings['active']) && $MG_MR_Settings['active']) { 
     $link = 'http://' . PROJECT_URL . '/contato'; // usado com mod_rewrite 
    } 

if ($conf) { 
     echo "<script type='text/javascript'>"; 
    echo "alert('Contato enviado com sucesso!');"; 
    echo "document.location.replace('$link');"; 
    echo "</script>"; 
    die(); 
    } else { 
     echo "<script type='text/javascript'>"; 
    echo "alert('Erro ao enviar contato, contate o administrador.');"; 
    echo "document.location.replace('$link');"; 
    echo "</script>"; 
    die(); 
    } 
} 

$msgContato = ''; 
if (!empty($_POST['SubmitContato'])) { 
    $msgContato = enviarContato(); 
} 

,這是對的Hotmail/Outlook中返回的問題是這樣的:

Contato沒有網站炫酷ESTA©天工貝拉 - 17/12/2013 11時48分53秒 177.97.93.251

它適用於Gmail。如果任何人都可以指出正確的方向,我將不勝感激。請詢問任何可能有助於解決問題的信息,希望看起來足夠清楚。

預先感謝您。

回答

0

好日子

i'm使用這個主題

$subject = "=?UTF-8?B?" . base64_encode('Confirmación de Compra (' . $order_id .")") . "?="; 

你的情況:

$subject = "=?UTF-8?B?" . base64_encode('Contato no site Modelo Site Rápido - ' . date('d/m/Y H:i:s')) . "?=";