php mail () неправильно отправляет HTML письма - PullRequest
2 голосов
/ 15 августа 2011

Я использую скрипт php, найденный здесь:

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

Я загрузил его на свой сервер - и он отказывается отправлять электронные письма правильно!

Это то, что я получаю в Gmail: (отображается как raw 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Есть ли какие-либо настройки сервера, которые мне, возможно, придется изменить ???

Я также использовал несколько плагинов WordPress на этом сервере, которые, кажется, имеют ту же проблему.

Любые идеи были бы хорошими.

ОБНОВЛЕНИЕ:

  • Код редактировался только с моим настоящим электронным письмом во всех местах, где это требовалось.(здесь удалено для безопасности) - полный код виден здесь: http://css -tricks.com / 2866-send-nice-html-email-with-php /

** ОБНОВЛЕНИЕ **

Вот что я получаю в 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>

Ответы [ 7 ]

3 голосов
/ 23 июля 2014

Была такая же проблема, когда отправка следующего заголовка приводила к получению 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";

Оказалось, что \r\n был дубликатом перевода строкидля сервера.Так что использование \ n в качестве разрыва строки работало для меня.

$headers  = 'From: xxx@xxx.org\n' .
            'MIME-Version: 1.0' . "\n" . 
            'Content-type: text/html; charset=iso-8859-1' . "\n" .
            "X-Mailer: PHP";
3 голосов
/ 15 августа 2011

На сайте руководства PHP есть хороший пример ( здесь ), который показывает, как это сделать. Попробуйте скопировать и вставить пример 4.

Похоже, вы не отправляете строку для правильного определения типа контента в заголовках. Возможно, вам следует сделать «показать оригинал» в Gmail и опубликовать здесь заголовки, если вы не можете понять это правильно из руководства.

2 голосов
/ 16 марта 2012

Похоже, что пустая строка после MIME-Version указывает, что заголовок окончен, поэтому она выводит строку Content-Type в виде обычного текста и html после нее, вместо того, чтобы читать эту строку как часть заголовка длязнать, чтобы преобразовать остальные в HTML.

MIME-Version: 1.0

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

<html><body>

Попробуйте получить все, что генерирует ваши заголовки, чтобы убрать пустую строку между MIME-Version и Content-Type.(Например, у вас есть дополнительные \r\n в этой строке? Как выглядит ваш код, где генерируются эти строки?) Также, возможно, добавьте вторую пустую строку между Content-Type и <html>.

1 голос
/ 03 мая 2019

Попробуйте это ..

     $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();
1 голос
/ 03 декабря 2018

Проблема с заголовком была решена в функции php mail ().

         $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();
0 голосов
/ 18 февраля 2014

Попробуйте использовать charset = UTF-8 вместо ISO-8859-1 ...

0 голосов
/ 26 февраля 2013

включите это в свой почтовый заголовок

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