首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >hotmail函数返回hotmail/outlook中的utf8错误

hotmail函数返回hotmail/outlook中的utf8错误
EN

Stack Overflow用户
提问于 2013-12-17 17:48:59
回答 1查看 359关注 0票数 0

最近,我在通过我的网站发送电子邮件时遇到了一些很大的问题,因为它似乎总是在电子邮件客户端上显示出主要的编码差异。由于它几乎总是适用于Gmail和其他方面,所以在Hotmail/Outlook上,邮件的标题/主题中总是会出现UTF8错误。我试着对几个变量进行编码/解码,以防止这种情况发生,但是每个解决方案最终都会留下一个错误。

以下是通过表单发送电子邮件的功能:

代码语言:javascript
复制
function enviarEmail($nomeRemetente = '', $emailRemetente = 'email@dominio.com', $emailDestinatario = 'email@dominio.com', $emailResposta = 'email@dominio.com', $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;
}

这个函数在这里叫做:

代码语言:javascript
复制
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('programacao@monge.com.br'/*, 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上返回的问题如下:

马铃薯无土栽培中心- 17/12/2013 11:48:53 177.97.93.251

在Gmail上效果很好。如果有人能指出正确的方向,我将非常感激。请询问任何可能帮助您解决这一问题的信息,希望它看起来足够清楚。

提前谢谢你。

EN

回答 1

Stack Overflow用户

发布于 2014-02-07 20:21:32

日安:

我要用这个题目

代码语言:javascript
复制
$subject = "=?UTF-8?B?" . base64_encode('Confirmación de Compra (' . $order_id .")" ) . "?=";

就你而言:

代码语言:javascript
复制
$subject = "=?UTF-8?B?" . base64_encode('Contato no site Modelo Site Rápido - ' . date('d/m/Y H:i:s') ) . "?="; 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20641233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档