Имам много странен проблем, за който не мога да разбера защо. Знам защо очевидно се причинява, но ...което е, когато 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 кода?
sendmail -oi -t
в канал, няма нужда да се забърквате с popen, можете също да игнорирате всичко, което ръководството на php казва за\r
- те не са желателни с mail() - person Jasen   schedule 20.12.2014