Я довольно новичок в php, и я использую скрипт, который создает функцию, называемую «mime_mailer», которая по существу позволяет мне использовать PHP для отправки электронных писем, которые могут быть сконструированы с помощью CSS вместо простого текста.
Тем не менее, в моем сценарии регистрации я пытаюсь написать код, который отправляет письмо по электронной почте, но я получаю сообщение об ошибке синтаксиса. Может кто-нибудь, пожалуйста, заполните меня?
$subject = "Your Red-line Account"; $css = "body{ color: #090127; background-color: #f0f0f0; }"; $to = $usercheck; //Message $message =<<<END <html> <head> <title> Red-line </title> </head> <body> <p> Hi $first_name, </p> <p> Your Red-line account is almost complete. To finish, go to <a href='www.thered-line.com'>The Red-line</a> and enter your eight digit confirmation code. </p> <p> Your confirmation code is: <b>$code</b> </p> <p> Sincerely, </p> <br /> <p> The Red-line Operator </p> </body> </html> END; // To send HTML mail, the Content-type header must be set $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; // Additional headers $headers .= "From: The Red-line <messages@theredline.com>\r\n"; $headers .= "To: $first_name $last_name <$usercheck>\r\n"; // Mail it require_once("function_mime_mailer.php"); mime_mailer($to, $subject, $message, $headers, NULL, $css); }
Вот код для файла «function_mime_mailer.php».
if(basename(__FILE__) == basename($_SERVER['PHP_SELF'])) send_404(); // stop http access to this file function mime_mailer($to, $subject, $message, $headers = NULL, $attachments = NULL, $css = NULL) { if(!preg_match('/^([_a-z0-9-]+)(\.[_a-z0-9-]+)*@([a-z0-9-]+)(\.[a-z0-9-]+)*(\.[a- z]{2,6})$/', $to)) return FALSE; if(preg_match('/<(html|head|body|div|a|h|p|table|br|img|b|hr|ol|ul|span|pre|i|form)[^>]*[^>]*>/i', $message)) $html = TRUE; if(stristr($message, '<body')) $message = stristr($message, '<body'); $message = delete_local_links($message); if(empty($headers)){ $headers = "MIME-Version: 1.0\n"; }else{ $headers.= "\nMIME-Version: 1.0\n"; } if(empty($html)){ $result = plain_text($message); }elseif(isset($html) and $html == TRUE){ if(!isset($css)) $css = NULL; if(preg_match('/<img[^>]+>/i', $message)){ $result = multipart_related($message, $css); }else{ $result = multipart_alternative($message, $css); } } $result['message'] = delete_non_cid_images($result['message']); if(!empty($attachments)){ $parts = attachments($attachments); array_unshift($parts, implode('', $result)); $result = multipart_mixed($parts); } $headers = $headers.$result['headers']; //print '<pre>'.htmlspecialchars($headers.$result['message']).'</pre>';exit; if(mail($to, $subject, $result['message'], $headers)) return TRUE; return FALSE; } ?>
Посмотрите на список токенов Parser .
T_SL
ссылается на <<
.
Вы не должны использовать вкладки или пробелы, прежде чем использовать END;
, Посмотрите на это огромное предупреждение .
Просто была та же проблема.
Оказалось, что вы довольствуетесь тем же самым строем, что и мой HERDEOC
неправильный пример
echo <<<HEREDOC code started on this line HEREDOC;
правильный пример
echo <<<HEREDOC code should have started on this line HEREDOC;
Надеюсь, это поможет кому-то еще!
Какую версию php вы используете? Синтаксис nowdoc действует только с PHP 5.3.0. См. Руководство: http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc
Сторона заметки, но может помочь кому-то: это может вызвать плохое слияние git. Рассматривать:
function foo <<<<<<< HEAD $bar = 1; <<<<<<< e0f2213bc34d43ef $bar = 2;
Парсер PHP произведет ту же ошибку.
Источник: только что получил от этого;)
В функции function_mime_mailer.php есть ошибка:
if(empty($headers)){ $headers = "MIME-Version: 1.0\n"; }else{ $headers.= "\nMIME-Version: 1.0\n"; }
должно быть
if(empty($headers)){ $headers = "MIME-Version: 1.0\r\n"; }else{ $headers.= "\r\nMIME-Version: 1.0\r\n"; }
также, если вы включаете заголовок MIME-версии, тогда функция будет включать его еще раз – эффективно иметь два из них.