PHP Sendmail изпрати съдържанието на имейли, което не се показва, когато съдържа CSS вграден стил

Имам много странен проблем, за който не мога да разбера защо. Знам защо очевидно се причинява, но ...което е, когато HTML съдържанието на имейла съдържа вграден CSS стил. Когато премахна вградения стил, имейлът пристига добре. Когато го добавя, не става.

Изпълнявам скрипта така:

$text_message = 'HELLO! Some more email content goes here';

$html_message = '<table>
<tbody><tr>
<td class="mcnTextContent" style="padding-top: 9px;padding-right: 18px;padding-bottom: 9px;padding-left: 18px;mso-table-lspace: 0pt;mso-table-rspace: 0pt;-ms-text-size-adjust: 100%;-webkit-text-size-adjust: 100%;color: #606060;font-family: Helvetica;font-size: 15px;line-height: 150%;text-align: left;" valign="top">

<h3 style="margin: 0;padding: 0;display: block;font-family: Helvetica;font-size: 18px;font-style: normal;font-weight: bold;line-height: 125%;letter-spacing: -.5px;text-align: left;color: #606060 !important;">HELLO!</h3>Some more email content goes here

</td>
</tr>
</tbody></table>';



$link = 'link';

$text_message = sprintf($text_message, $msg_details['name'], $link, $this->setts['sitename']);
$html_message = sprintf($html_message, $msg_details['name'], $link, $this->setts['sitename']);

send_mail($msg_details['email'], 'Message Received - ' . $setts['sitename'], $text_message, 
    $this->setts['admin_email'], $html_message, null, $send);

И тогава задната част на функцията "send_mail" е:

function send_mail($to, $subject, $text_message, $from_email, $html_message = null, $from_name = null, $send = true, $reply_to = null) 
{
    global $setts, $current_version;

    if ($send)
    {
        ## set date
        $tz = date('Z');
        $tzs = ($tz < 0) ? '-' : '+';
       $tz = abs($tz);
        $tz = ($tz / 3600) * 100 + ($tz % 3600) / 60;
        $mail_date = sprintf('%s %s%04d', date('D, j M Y H:i:s'), $tzs, $tz);

        $uniq_id = md5(uniqid(time()));

        ## create the message body
        $html_message = ($html_message) ? $html_message : $text_message;

        $html_msg = "<!--\n" . $text_message . "\n-->\n". "<html><body>". $html_message . "</body></html>";

        $from_name = (!empty($from_name)) ? $from_name : GMSG_MAIL_FROM_ADMIN;
        switch ($setts['mailer'])
        {
            case 'sendmail': ## send through the UNIX Sendmail function
                ## create header
                $header = "Date: " . $mail_date . "\n".
                    "Return-Path: " . $from_email . "\n".
                    "To: " . $to . "\n".
                    "From: " . $from_name . " <" . $from_email . ">\n".
                    (($setts['enable_bcc']) ? "Bcc: " . $setts['admin_email'] . "\n" : "").
                    "Reply-to: " . ((!empty($reply_to)) ? $reply_to : $from_email) . "\n".
                    "Subject: " . $subject . "\n".
                    sprintf("Message-ID: <%s@%s>%s", $uniq_id, $_SERVER['SERVER_NAME'], "\n").
                    "X-Priority: 3\n".
                    "X-Mailer: Sendmail [version " . $current_version . "]\n".
                    "MIME-Version: 1.0\n".
                    "Content-Transfer-Encoding: 7bit\n".
                    sprintf("Content-Type: %s; charset=\"%s\"","text/html",LANG_CODEPAGE).
                    "\n\n";

                if ($from_email)
                {
                    $output = sprintf("%s -oi -f %s -t", $setts['sendmail_path'], $from_email);
                }
                else
                {
                    $output = sprintf("%s -oi -t", $setts['sendmail_path']);
                }

                if(!@$mail = popen($output, "w")) 
                {
                    echo GMSG_COULDNT_EXECUTE . ': ' . $setts['sendmail_path'];
                }

                fputs($mail, $header);
                fputs($mail, $html_msg);

                $result = pclose($mail) >> 8 & 0xFF;

                if($result != 0) 
                {
                    echo GMSG_COULDNT_EXECUTE . ': ' . $setts['sendmail_path'];
                }
                break;
        }
    }
}

Знам, че кодът е объркан ... но не е мой собствен, това е скрипт, който редактирам. Проблемът е просто ... когато премахна "style..." в променливата $html_message, HTML имейлът се показва правилно, включително h3 стила и т.н. Когато добавя стила, той показва само $text_message съдържание.

Каква част може да премахва или деактивира HTML кода?


person user1227914    schedule 20.12.2014    source източник
comment
функцията mail() на php извиква sendmail -oi -t в канал, няма нужда да се забърквате с popen, можете също да игнорирате всичко, което ръководството на php казва за \r - те не са желателни с mail()   -  person Jasen    schedule 20.12.2014
comment
Току-що забелязах още нещо, което може да е виновникът. Деактивирах sprintf и сега работи добре ..но трябва да го активирам отново, така че променливите да се предават правилно. Възможно ли е sprintf да се забърква с CSS?   -  person user1227914    schedule 20.12.2014


Отговори (1)


вероятно вашият пощенски клиент или пощенски филтър.

изглежда разбирате sendmail достатъчно добре, направете някои тестове с

sendmail -oi -t < /tmp/email.txt
person Jasen    schedule 20.12.2014