3

我有几个简单的表单可以发送仅包含 html 的电子邮件。大多数客户端(Gmail、Lotus Notes 8、hotmail/live、windows live mail、outlook express)都可以正常接收电子邮件,但 Outlook 2007 不能。

代码如下所示:

$data="
            <html>
                <body>
                    <strong><u>$sub</u></strong><br><br>
                    <strong>Name:</strong> {$_POST["nombre"]}<br><br>
                    <strong>Phone:</strong>{$_POST["telefono"]}<br><br>
                    <strong>Email:</strong> {$_POST["email"]}<br><br>
            <strong>Subject:</strong> {$_POST["asunto"]}<br><br>
                    <strong>Question:</strong> {$_POST["consulta"]}</strong>
                </body>
            </html>";
            $header = "Reply-To: $from\r\n";
            $header .= "From: \"".$_POST["nombre"]."\" <$from>\r\n";
            $header .= "MIME-Version: 1.0\r\n";
            $header .= "Content-Type: text/html; charset=iso-8859-1\r\n";

            $enviado = mail($destino,$sub,$data,$header);

$from是消息的唯一验证部分)

客户收到的消息如下所示:

Content-Type: text/html; charset=iso-8859-1
From: Consulta de "Boss" <boss@myfirm.com>
Reply-To: boss@myfirm.com
X-Mailer: PHP/

<strong><u>Solicitud de envío de recetas -
CLIENT</u></strong><br><br><strong>Nombre y Apellido:</strong>
Boss<br><br><strong>Email:</strong>
boss@myfirm.com<br><br><br>

有任何想法吗?

4

8 回答 8

8

您是否尝试过发送多部分电子邮件,这样做时我们从未遇到过 Outlook 2k3 和 2k7 的问题(HTML 渲染不佳除外)

<?php
$header = "From: Sender <sen...@domain.org>\r\n";
$header .= "Reply-to: Sender <blabla...@domain.net>\r\n";
$header .= "X-Mailer: Our Php\r\n";

$boundary = "==String_Boundary_x" .md5(time()). "x\r\n";
$boundary2 = "==String_Boundary2_y" .md5(time()). "y\r\n";

$header .= "MIME-Version: 1.0\r\n";
$header .= "Content-Type: multipart/related;\r\n";
$header .= " type="multipart/alternative";\r\n";
$header .= " boundary="$boundary";\r\n";

$message = "If you read this, your email client doesn't support MIME\r\n";

$message .= "--$boundary\r\n";
$message .= "Content-Type: multipart/alternative;\r\n";
$message .= " boundary="$boundary2";\r\n";

$message .= "--$boundary2\r\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "Alternative message in plain text format.\r\n";

$message .= "--$boundary2\r\n";
$message .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n";
$message .= "Content-Transfer-Encoding: 7bit\r\n";
$message .= "<html><body><p>HTML formatted message</p></body></html>";

你可以用你想要的任何东西替换边界,但它们必须是唯一的。

为了在 php 中发送更强大和灵活的电子邮件,我建议使用SwiftMailer

编辑:由于 Outlook 2007 有一个非常愚蠢的 HTML 渲染器,您也可以尝试修复您的标记,</font>在您的示例中从未打开过,不知道它是真正的邮件还是有问题的错字。

于 2010-03-11T08:54:23.193 回答
4

我有一个非常相似的问题,请尝试从您的退货中删除 /r 并仅使用 /n。Outlook 和 hotmail 与 /r/n 有问题。

于 2011-01-25T19:23:46.713 回答
3

我确认与 Exchange janmoesen共享的经验。必须将标头中的 CRLF 更改为 LF,然后它开始工作。

(再次感谢微软让我多工作了 40% 的时间。

也非常感谢 janmoesen 指出这一点!本次搜索结束。)

于 2010-12-28T15:58:57.920 回答
3

我在使用 Outlook 2007 时遇到了同样的问题。

答案很简单:将\r\n替换为\n

于 2012-09-25T18:38:34.080 回答
2

我在标题中遇到了 Exchange(不仅仅是 Outlook)和 CRLF 的问题,结果相似。基本上,我们发送带有 CRLF 分隔标头的邮件(在 Debian 上使用 PHP 和 Postfix),这些邮件在到达时会在 Exchange 中被破坏。当我将它们更改\r\n为 simple\n时,问题就消失了。(“该死的 RFC!”,嗯?)

YMMV,显然,因为不清楚您的其他邮件客户端是连接到与 Outlook 相同的服务器,还是完全使用单独的服务器。

于 2010-03-11T07:53:42.820 回答
1

如果消息是 HTML 格式,您需要将其标识为:

$header .= "Content-Type: text/html; charset=iso-8859-1\r\n";
于 2010-01-27T18:31:27.433 回答
1

我一直对 MIME 编码的 HTML 邮件有更好的运气。即使只有一个部分,我通常也会使用 multipart/mixed 并明确设置内容类型(text/html)。我对 PHP 不是很熟悉,但是这个PEAR::Mail_Mime包看起来像一个候选人。

Outlook 处理它应该没有问题。(强调不应该)。

于 2010-03-10T05:24:44.203 回答