У меня очень странная проблема, не могу понять почему. Я знаю, почему это, по-видимому, вызвано, хотя ... когда 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;
}
}
}
Я знаю, код беспорядочный... но он не мой, это скрипт, который я редактирую. Проблема в том, что... всякий раз, когда я удаляю "стиль..." в переменной $html_message, электронное письмо в формате HTML отображается правильно, включая стиль h3 и т. д. Когда я добавляю стиль, он показывает только $text_message содержание.
Какой частью может быть удаление или отключение HTML-кода?
sendmail -oi -t
в канале, нет необходимости возиться с popen, вы также можете игнорировать все, что в руководстве php говорится о\r
- они не желательны с mail() - person Jasen   schedule 20.12.2014