简体   繁体   English

php 邮件()未正确发送 HTML 电子邮件

[英]php mail() not sending HTML emails correctly

I'm using the php script found here:我正在使用此处找到的 php 脚本:

http://css-tricks.com/2866-sending-nice-html-email-with-php/ http://css-tricks.com/2866-sending-nice-html-email-with-php/

I've uploaded it to my server - and it refuses to send emails correctly!我已将它上传到我的服务器 - 它拒绝正确发送电子邮件!

This is what I receive in Gmail: (displays as raw html)这是我在 Gmail 中收到的内容:(显示为原始 html)

Content-Type: text/html; charset=ISO-8859-1
<html>
    <body>
        <img src="http://css-tricks.com/examples/WebsiteChangeRequestForm/images/wcrf-header.png" alt="Website Change Request" />
        <table rules="all" style="border-color: #666;" cellpadding="10">
            <tr style='background: #eee;'>
                <td><strong>Name:</strong> </td>
                <td>sd</td>
            </tr>
            <tr>
                <td><strong>Email:</strong> </td>
                <td>myrealemail@gmail.com.au</td>
            </tr>
            <tr>
                <td><strong>Type of Change:</strong> </td>
                <td>Change to Existing Content</td>
            </tr>
            <tr>
                <td><strong>Urgency:</strong> </td>
                <td>Super Wicked Urgent</td>
            </tr>
            <tr>
                <td><strong>URL To Change (main):</strong> </td>
                <td>http://css-tricks.com/2866-sending-nice-html-email-with-php/</td>
            </tr>
            <tr>
                <td><strong>CURRENT Content:</strong></td>
                <td>fdasgdsfg</td>
            </tr>
            <tr>
                <td><strong>NEW Content:</strong> </td>
                <td>sdfgsdgf</td>
            </tr>
        </table>
    </body>
</html>

Is there any server settings that I may have to change???有没有我可能需要更改的服务器设置???

I've also used some wordpress plugins on this server that seem to have the same issue.我还在这台服务器上使用了一些 wordpress 插件,这些插件似乎有同样的问题。

Any ideas would be great.任何想法都会很棒。

UPDATE:更新:

** UPDATE ** ** 更新 **

Here's what i get in Gmail when i click "Show Original"当我单击“显示原件”时,这是我在 Gmail 中得到的内容

Delivered-To: [removed-intentionally]@gmail.com
Received: by 10.204.157.136 with SMTP id b8cs43947bkx;
    Sun, 14 Aug 2011 22:29:40 -0700 (PDT)
Received: from mr.google.com ([10.236.77.232])
    by 10.236.77.232 with SMTP id d68mr14702149yhe.74.1313386180151 (num_hops = 1);
    Sun, 14 Aug 2011 22:29:40 -0700 (PDT)
Received: by 10.236.77.232 with SMTP id d68mr11051146yhe.74.1313386179570;
    Sun, 14 Aug 2011 22:29:39 -0700 (PDT)
Return-Path: <anonymous@ub002lps00.cbr.the-server.net.au>
Received: from ironport1-mx.cbr1.mail-filtering.com.au (ironport1-mx.cbr1.mail-filtering.com.au [203.88.115.241])
    by mx.google.com with ESMTP id g70si16130380yhe.152.2011.08.14.22.29.38;
    Sun, 14 Aug 2011 22:29:39 -0700 (PDT)
Received-SPF: neutral (google.com: 203.88.115.241 is neither permitted nor denied by best guess record for domain of anonymous@ub002lps00.cbr.the-server.net.au) client-ip=203.88.115.241;
Authentication-Results: mx.google.com; spf=neutral (google.com: 203.88.115.241 is neither permitted nor denied by best guess record for domain of anonymous@ub002lps00.cbr.the-server.net.au) smtp.mail=anonymous@ub002lps00.cbr.the-server.net.au
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: AqoHAHOuSE5xFATR/2dsb2JhbABBmHOPCHeEEYd0lCyfAIZHBKQJ
X-IronPort-AV: E=Sophos;i="4.67,372,1309701600"; 
d="scan'208,217";a="465774510"
Received: from ub002lps00.cbr.the-server.net.au ([113.20.4.209])
by ironport1-mta.cbr1.mail-filtering.com.au with ESMTP; 15 Aug 2011 15:29:03 +1000
Received: (qmail 14705 invoked by uid 10317); 15 Aug 2011 07:29:02 +0200
Date: 15 Aug 2011 07:29:02 +0200
Message-ID: <20110815052902.14702.qmail@ub002lps00.cbr.the-server.net.au>
To: [removed-intentionally]@gmail.com
Subject: Website Change Reqest
From: [removed-intentionally]@gmail.com
Reply-To: [removed-intentionally]@gmail.com
MIME-Version: 1.0

Content-Type: text/html; charset=ISO-8859-1

<html><body><img src="http://css-tricks.com/examples/WebsiteChangeRequestForm/images/wcrf-header.png" alt="Website Change Request" /><table rules="all" style="border-color: #666;" cellpadding="10"><tr style='background: #eee;'><td><strong>Name:</strong> </td><td>sd</td></tr><tr><td><strong>Email:</strong> </td><td>[removed-intentionally]@gmail.com</td></tr><tr><td><strong>Type of Change:</strong> </td><td>Change to Existing Content</td></tr><tr><td><strong>Urgency:</strong> </td><td>Super Wicked Urgent</td></tr><tr><td><strong>URL To Change (main):</strong> </td><td>http://css-tricks.com/2866-sending-nice-html-email-with-php/</td></tr><tr><td><strong>CURRENT Content:</strong> </td><td>fdasgdsfg</td></tr><tr><td><strong>NEW Content:</strong> </td><td>sdfgsdgf</td></tr></table></body></html>

Had the same problem, where sending following header produced a HTML-Email on one server but didn't work on another server有同样的问题,在 header 之后发送在一台服务器上产生 HTML 电子邮件,但在另一台服务器上不起作用

$headers  = 'From: xxx@xxx.org\r\n' .
            'MIME-Version: 1.0' . "\r\n" . 
            'Content-type: text/html; charset=iso-8859-1' . "\r\n" .
            "X-Mailer: PHP";

It turned out, that the \r\n was a duplicate linebreak for the server.事实证明, \r\n是服务器的重复换行符。 So just using \n as a line break worked for me.所以只是使用 \n 作为换行符对我有用。

$headers  = 'From: xxx@xxx.org\n' .
            'MIME-Version: 1.0' . "\n" . 
            'Content-type: text/html; charset=iso-8859-1' . "\n" .
            "X-Mailer: PHP";

There is a good example on the PHP manual site ( here ) that shows how to do this. PHP 手册站点(此处)上有一个很好的示例,说明了如何执行此操作。 Try copy and paste example 4.尝试复制并粘贴示例 4。

It looks like you are not sending the string to identify the content type through in the headers properly.看起来您没有在标题中正确发送字符串来识别内容类型。 Maybe you should do a "show original" in Gmail and post the headers here as well if you can't get it right from the manual.也许你应该在 Gmail 中做一个“显示原创”,如果你不能从手册中得到它,也可以在这里发布标题。

It looks like the blank line after MIME-Version indicates that the header is over, so it is outputting the Content-Type line as regular text, and the html after it, instead of reading that line as part of the header to know to convert the rest to HTML.看起来MIME-Version之后的空行表示 header 已结束,因此它将Content-Type行输出为常规文本,并在其后输出 html,而不是将该行作为 Z099FBZF995346F331C5CE3 的一部分读取以转换为 know to64046F331C740 rest 到 HTML。

MIME-Version: 1.0

Content-Type: text/html; charset=ISO-8859-1

<html><body>

Try getting whatever is generating your headers to remove the blank line between MIME-Version and Content-Type .尝试获取生成标题的任何内容以删除MIME-VersionContent-Type之间的空白行。 (For instance, do you have an extra \r\n on that line? What does your code look like where these lines are being generated?) Also maybe add a second blank line between Content-Type and <html> . (例如,你在那一行有额外的\r\n吗?你的代码在这些行的生成位置是什么样的?)也可以在Content-Type<html>之间添加第二个空行。

Header problem was solved in php mail() function. Header 问题在 php mail() function 中得到解决。

         $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
         $headers .= 'From:  ' . $senderEmail . ' <' . $senderEmail .'>' . " 
         \r\n" .
        'Reply-To: '.  $senderEmail . "\r\n" .
        'X-Mailer: PHP/' . phpversion();

Try this..尝试这个..

     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
     $headers .= 'From:  ' . $sender . ' <' . $sender .'>' . " \r\n" .
    'Reply-To: '.  $sender . "\r\n" .
    'X-Mailer: PHP/' . phpversion();

include this in your mail header将此包含在您的邮件中 header

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

Try using charset=UTF-8 instead of ISO-8859-1...尝试使用 charset=UTF-8 而不是 ISO-8859-1 ...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM