Gmail не будет отображать электронную почту в формате HTML, используя PHP

0

Я пытаюсь получить gmail, чтобы отобразить содержимое html отправляемого им сообщения электронной почты, но он просто дает мне полный текст сообщения электронной почты. Когда я отправляю электронное письмо на yahoo или мой адрес электронной почты на comcast.net, у меня нет проблем с просмотром части электронной почты html. Gmail отображает все, включая граничную строку. Это мой код ниже:

//  Create a boundary string. It must be unique
//  so we use the MD5 algorithm to generate a random hash.
$random_hash = md5(date('r', time()));
//  Define the headers we want passed. Note that they are separated with \r\n.
$headers = "MIME-Version: 1.0\r\n";
$headers .= "From: \"" . $replyToName . "\" <" . $replyTo . ">\r\nReply-To: " . $replyTo . "\r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
//  Add boundary string and mime type specification
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-" . $random_hash ."\"";
$headers .= "\r\n";
//This is the plain-text part of the e-mail. This is what the recipient will see if they can only receive text-only e-mails.
?>
--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 7bit

<?php echo $plainMsg; ?>

<?php echo $mainSite; ?>
______________________________________________________

This e-mail is intended for the eyes of the recipient only. If you are not the
intended recipient, please send an e-mail to <?php echo $replyTo; ?> to inform us of
the mistake, and please destroy any and all copies of this e-mail.

--PHP-alt-<?php echo $random_hash; ?> 
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<title>Untitled Document</title>
</head>
<table width="100%" border="0">
<tr>
<td>
<table width="100%" border="0" bgcolor="#ADD8E6">
<tr>
<td><img src="<?php echo $mainLink; ?>/images/BF.gif" width="95" height="65"></td>
<td valign="top"><img src="<?php echo $imageLink; ?>" width="<?php echo $imageWidth; ?>" height="<?php echo $imageHeight; ?>" /></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<font face="Arial, Helvetica, sans-serif" size="2">
<?php echo $mailMsg; ?>
</font>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>
<table width="100%" border="0">
<tr>
<td>
<p>
<font face="Arial, Helvetica, sans-serif" size="2">
<a href="<?php echo $mainLink; ?>"><?php echo $mainSite; ?></a>
</font>
<br />
______________________________________________________
<br />
<br />
<font face="Arial, Helvetica, sans-serif" size="1">
This e-mail is intended for the eyes of the recipient only. If you are not the intended recipient, please send an e-mail to <a href="mailto:<?php echo $replyTo; ?>"><?php echo $replyTo; ?></a> to inform us of the mistake, and please destroy any and all copies of this e-mail.
</font>
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%" border="0" bgcolor="#ADD8E6">
<tr>
<td align="center">
<font size="-2">All content, images, and data &#0169; Bright Futures 2009-2014.
<br />
All rights reserved.</font>
</td>
</tr>
</table>
</td>
</tr>
</table>

--PHP-alt-<?php echo $random_hash; ?> --

Когда я отправляю это электронное письмо, я вижу, что все сообщение не закодировано. Он показывает мне строку границы и теги html в сообщении. Когда я перехожу в "Показать оригинал" в gmail, я получаю следующее:

Delivered-To: [email protected]
Received: by 10.182.23.6 with SMTP id i6csp32095obf;
        Wed, 19 Feb 2014 01:03:00 -0800 (PST)
X-Received: by 10.68.106.130 with SMTP id gu2mr924626pbb.59.1392800580001;
        Wed, 19 Feb 2014 01:03:00 -0800 (PST)
Return-Path: <[email protected]>
Received: from m1plded02-04.prod.mesa1.secureserver.net (m1plded02-04.prod.mesa1.secureserver.net. [64.202.189.17])
        by mx.google.com with ESMTP id ri10si3237317pbc.297.2014.02.19.01.02.59
        for <[email protected]>;
        Wed, 19 Feb 2014 01:02:59 -0800 (PST)
    Received-SPF: pass (google.com: domain of [email protected] designates 64.202.189.17 as permitted sender) client-ip=64.202.189.17;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of [email protected] designates 64.202.189.17 as permitted sender) [email protected]
Received: from p3plcpnl0157.prod.phx3.secureserver.net ([184.168.200.188])
    by m1plded02-04.prod.mesa1.secureserver.net with : DED :
    id U92x1n01E44PGPL0192x1U; Wed, 19 Feb 2014 02:02:59 -0700
Received: from gsg1175 by p3plcpnl0157.prod.phx3.secureserver.net with local (Exim 4.82)
    (envelope-from <[email protected]>)
    id 1WG33R-001P1W-8P; Wed, 19 Feb 2014 02:02:57 -0700
To: [email protected],[email protected]
Subject: Test E-mail
X-PHP-Script: www.yellowcas.com/sendemail.php for 107.4.20.247
MIME-Version: 1.0
From: "Gregory Greenwell" <[email protected]>
Reply-To: [email protected]
CC: [email protected]
X-Mailer: PHP/5.4.23
Content-Type: multipart/alternative; boundary="PHP-alt-8d0c53f7f76522e3a03197894d7e89fe"
Message-Id: <[email protected]>
Date: Wed, 19 Feb 2014 02:02:57 -0700
X-AntiAbuse: This header was added to track abuse, please include it with any abuse report
X-AntiAbuse: Primary Hostname - p3plcpnl0157.prod.phx3.secureserver.net
X-AntiAbuse: Original Domain - gmail.com
X-AntiAbuse: Originator/Caller UID/GID - [267295 956] / [47 12]
X-AntiAbuse: Sender Address Domain - p3plcpnl0157.prod.phx3.secureserver.net
X-Get-Message-Sender-Via: p3plcpnl0157.prod.phx3.secureserver.net: authenticated_id: gsg1175/from_h
X-Source: 
X-Source-Args: /usr/sbin/proxyexec -q -d -s /var/run/proxyexec/cagefs.sock/socket /bin/cagefs.server 
X-Source-Dir: yellowcas.com:/public_html


--PHP-alt-8d0c53f7f76522e3a03197894d7e89fe 
Content-Type: text/plain; charset="utf-8" 
Content-Transfer-Encoding: 7bit 

We will keep doing this until we get it right!

Why won't this work?

WWW.YELLOWCAS.COM
______________________________________________________

This e-mail is intended for the eyes of the recipient only. If you are not the intended recipient, please send an e-mail to [email protected] to inform us of the mistake, and please destroy any and all copies of this e-mail.

--PHP-alt-8d0c53f7f76522e3a03197894d7e89fe 
Content-Type: text/html; charset="utf-8" 
Content-Transfer-Encoding: 7bit 


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<title>Untitled Document</title>
</head>
<table width="100%" border="0">
<tr>
<td>
<table width="100%" border="0" bgcolor="#ADD8E6">
<tr>
<td><img src="https://www.yellowcas.com/images/BF.gif" width="95" height="65"></td>
<td valign="top"><img src="https://www.yellowcas.com/images/brightfutures70.gif" width="520" height="60" /></td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<font face="Arial, Helvetica, sans-serif" size="2">
We will keep doing this <b>until we get it right!</b>

Why won't this work?
</font>
</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>
<table width="100%" border="0">
<tr>
<td>
<p>
<font face="Arial, Helvetica, sans-serif" size="2">
<a href="https://www.yellowcas.com">WWW.YELLOWCAS.COM</a>
</font>
<br />
______________________________________________________
<br />
<br />
<font face="Arial, Helvetica, sans-serif" size="1">
This e-mail is intended for the eyes of the recipient only. If you are not the intended recipient, please send an e-mail to <a href="mailto:[email protected]">[email protected]</a> to inform us of the mistake, and please destroy any and all copies of this e-mail.
</font>
</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table width="100%" border="0" bgcolor="#ADD8E6">
<tr>
<td align="center">
<font size="-2">All content, images, and data &#0169; Bright Futures 2009-2014.
<br />
All rights reserved.
</font>
</td>
</tr>
</table>
</td>
</tr>
</table>

--PHP-alt-8d0c53f7f76522e3a03197894d7e89fe-- 

Я прошу прощения за это так долго, но я не могу понять, почему gmail не отображает html как html. Я использую функцию php mail() для отправки электронной почты. Каждый другой почтовый клиент, на который я смотрел, делает html просто прекрасным, но gmail просто отображает базовый код в электронном письме. Если у ЛЮБОГО есть ЛЮБЫЕ идеи, я был бы очень благодарен за их слушание. Спасибо, что нашли время, чтобы просмотреть мой код.

  • 0
    У меня точно такая же проблема. Я обнаружил, что X-AntiAbuse добавляется Gmail, если ваша запись DNS неверна. Вы можете попробовать microsoft.com/mscorp/safety/content/technologies/senderid/…, чтобы создать правильный SPF для вашей записи DNS. Я пытаюсь это сейчас. Если это не сработает, я добавлю награду к этому вопросу. Если это сработает, я добавлю то, что сделал, в качестве ответа на ваш вопрос.
Теги:
email

2 ответа

1

Я заметил, что вы используете \r\n. Gmail больше не отображает его. Если вы замените его на \n, оно должно отображаться в gmail.

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

  • 0
    Я посмотрел на другой пост со ссылкой на эту конкретную страницу. Я попробовал, но у меня почему-то не получилось. Я попробую это снова и опубликую свои результаты. Благодарю за ваш ответ. Я ценю любую помощь, которую я могу получить.
  • 0
    Я удалил все \ r из кода, и gmail все еще дает мне тот же результат. Это расстраивает меня.
Показать ещё 1 комментарий
0

Вот что я сделал, чтобы решить эту проблему для моей системы.

Во-первых: после некоторых исследований, а также проб и ошибок, я обнаружил, что и Gmail, и Thunderbird имеют дополнительные символы на концах строк заголовка. "\ r" считается дополнительным символом, как и пробелы. Я удалил все символы "\ r" из всего этого, чтобы быть уверенным, потому что мои программы редактирования кода иногда добавляют их во время редактирования (я часто переключаюсь между различными операционными системами). Для этого вы можете использовать выходные буферы.

 ob_start();

 // all of your output here like normal

 $output = str_replace("\r","",ob_get_clean());
 echo $output;  // now your output has no "\r" characters

Во-вторых: я дважды проверил совместимость MIME. Мне не хватало точку с запятой в одном месте, но в другом месте была дополнительная точка с запятой, и у меня было дополнительное пространство в нескольких местах. У вас есть ненужные (и, возможно, иногда недопустимые) кавычки. Вот лучший способ сделать заголовки, чтобы вы могли четко видеть, где могут быть дополнительные символы. Построив заголовки с использованием массива и импонируя с помощью "\n", я гарантирую, что на концах нет символов "\ r" или пробелов. Технически вам не нужно ставить переменные в скобки {} но я всегда делаю это для ясности.

$replyToName = trim($replyToName);
$replyTo = trim($replyTo);

$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "From: {$replyToName} <{$replyTo}>";
$headers[] = "Reply-To: {$replyTo}";
$headers[] = "X-Mailer: PHP/".phpversion();
$headers[] = "Content-Type: multipart/alternative;boundary=PHP-alt-{$random_hash}";
$headers = implode("\n", $headers)."\n";

В-третьих: Как и у вас, у меня были проблемы с DNS, на которые Gmail отвечает, добавляя заголовки X-AntiAbuse. Вы не хотите их видеть, потому что они означают, что вы на один шаг от папки спама. Вы должны перейти на http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/default.aspx и следовать мастеру для создания новой строки SPF для своего DNS, а затем скопировать и вставить то, что мастер создает в вашу запись DNS. Если вы не представляете, что это значит, обратитесь в службу технической поддержки своего веб-хостинга, и вам нужно пройти через него.

Ваш текущий DNS:

v=spf1 a mx ptr include:secureserver.net ~all

Что это должно быть, это примерно так:

v=spf1 a mx ip4:107.4.20.247 ptr:secureserver.net a:secureserver.net include:secureserver.net ~all  

Установив значения "ptr" и "a" на ваш почтовый сервер (secureserver.net в соответствии с тем, что вы вставили в свой вопрос), он позволяет Gmail и другим серверам получать информацию о том, что ваш почтовый сервер может отправлять вам электронную почту. В том числе IP-адрес вашего конкретного сайта делает больше клиентов электронной почты, которые, вероятно, считают, что вы не спамер.

Кстати, вам не нужно делать хеш файл md5 для вашей граничной строки, и, в отличие от вашего комментария, он не обязательно должен быть "уникальным", просто не найденным в теле письма. Просто поместите строку букв и цифр, которые, безусловно, никогда не появятся в любом сообщении электронной почты, и все в порядке. Мой - "BOUNDARY456BREAK". Никто не собирается писать это по электронной почте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню