Функция PHP mail() не отправляет HTML

Я пытаюсь отправить HTML-контент через функцию PHP mail(). Я не знаю, что не так с моим кодом. Перепробовал много способов, потратил часы. но ничего не вышло. Может ли кто-нибудь сказать мне, что не так с моим кодом, пожалуйста?

<?php 
$to = "[email protected]";
$today = date("Y/m/d");
$today = $today." 00:00";
$count_cash_inc = mysql_query("SELECT sum(income) as inc, sum(expense) as exp FROM journal_entry WHERE `date` >= '$today'");
$inc = mysql_fetch_array($count_cash_inc);
$income_c = $inc['inc'];
$epense_c = $inc['exp'];
$counter_cash = $income_c - $epense_c;
$subject = "Daily Report From Sri Sankalpa";
$headers = "From: [email protected]\r\n";
$headers .= "Reply-To: [email protected]\r\n";
$headers .= "CC: [email protected]\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";
$message = '<center><h1>Sri Sankalpa Daily Journal Report</h1>';
$message .= '<br><table><tr><td>Date</td><td>Total Income</td><td>Total Expense</td><td>Balance</td></tr>';
$message .= '<tr><td>'.date("d-m-Y").'</td><td>'.$income_c.'</td><td>'.$epense_c.'</td><td>'.$counter_cash.'</td></tr></table><br>';
$message .= '<p>To Know More... Please Click <strong><a target="_blank" href="http://srisankalpa.com/demo/journal_entry.php">HERE</a></strong></p></center>';
mail($to, $subject, $message, $headers);
?>

Я попытался удалить \r,\r\n и изменить charset=UTF-8 на charset=iso-8859-1. Но ничего не работает. Ждем вашей помощи. Почта отправляется в виде простого текста без строки ниже

$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

person SHAKTHI    schedule 05.03.2017    source источник
comment
Используйте PHPmailer, более продвинутый, чем простой mail(), и легко отслеживающий ошибки.   -  person Abdulla Nilam    schedule 05.03.2017
comment
Письмо могло быть отправлено, но gmail удалил его (спам). Чтобы предотвратить это, просто используйте phpmailer   -  person Luca Jung    schedule 05.03.2017
comment
добавьте эти заголовки $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; и посмотрите   -  person Abdulla Nilam    schedule 05.03.2017
comment
@AbdullaNilam Нет, это не тренировка.   -  person SHAKTHI    schedule 05.03.2017
comment
@LucaJung Не входите в спам тоже...   -  person SHAKTHI    schedule 05.03.2017
comment
@SHAKTHI Я знаю, у меня была такая же проблема. Попробуйте другой адрес электронной почты, чтобы быть уверенным. Но если вы запускаете свой скрипт на локальном хосте, посмотрите ответ Ника.   -  person Luca Jung    schedule 05.03.2017


Ответы (1)


Я запустил ваш скрипт на своем онлайн-сервере, и он, кажется, работает нормально, хотя для меня не включая ваш SQL-запрос и переменные.

Может быть несколько причин, по которым ваше письмо не отправляется.

Почтовый сервер Localhost не настроен

Если вы запускаете этот скрипт на своем локальном хосте, mail скорее всего не будет работать, так как у вас не настроен почтовый сервер на вашем локальном хосте. Прочитайте этот ответ о настройке почтового сервера на вашем локальном хосте (XAMPP ).

Проверьте журналы вашего сервера

Просмотрите журналы вашего сервера на наличие ошибок, которые могли возникнуть при попытке отправить почту. Файлы журнала обычно можно найти в корневом каталоге вашего сервера в папке logs или аналогичной. Этот ответ поможет вам определить местоположение почтовых журналов.

Почта блокируется хостом

Уточняйте у своего хозяина. В зависимости от того, с кем вы размещаетесь, они могут блокировать или не блокировать исходящие электронные письма. Многие люди используют mail PHP с плохими намерениями, поэтому некоторые хосты могут просто отключить его. Вместо этого они предпочли бы, чтобы вы использовали SMTP-сервер.

Ваша почта могла быть помечена как спам

Проверьте папку со спамом. Gmail не любит электронные письма, отправляемые через mail, и, скорее всего, поместит ваше письмо в папку со спамом.

Повторяющиеся разрывы строк в строке заголовка

В некоторых случаях использование \n\r может привести к дублированию разрывов строк в строке заголовка. Попробуйте вместо этого использовать \r или \n.

Кодировка символов

Попробуйте переключиться с $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; на $headers .= "Content-Type: text/html; charset=iso-8859-1\r\n";

Лучшая альтернатива PHP mail();

Чтобы отправлять почту на ваш локальный хост, вам лучше использовать что-то вроде PHPMailer. Это позволит вам отправлять почту через SMTP-сервер. Удобный учебник здесь.

person Nick Duncan    schedule 05.03.2017
comment
Я работаю на общем хосте. - person SHAKTHI; 05.03.2017
comment
Возможно, ваш хост не разрешает отправку исходящей почты от mail - person Nick Duncan; 05.03.2017
comment
О, позвольте мне связаться со службой поддержки хостинга. Но, как я уже говорил, без этой строки $headers .= Content-Type: text/html; кодировка=UTF-8\r\n; Функция mail() отлично работает как обычный текст. - person SHAKTHI; 05.03.2017
comment
Я запустил ваш код на своем сервере (кроме SQL-запроса), и он отлично работает со строкой заголовка html. - person Nick Duncan; 05.03.2017
comment
Спасибо за вашу помощь. Таким образом, это должно быть проблема хостинг-сервера. Позвольте мне проверить с ними. Действительно, спасибо @Nick Duncan - person SHAKTHI; 05.03.2017
comment
Я обновил свой ответ несколькими другими альтернативными решениями. - person Nick Duncan; 05.03.2017