не работает функция mail()

fredwriter

Новичок
Здравствуйте, у меня проблема, не работает функция mail().
Вот код:


PHP:
$to = "Менеджер "."<[email protected]>";
$to = iconv ('utf-8', 'windows-1251', $to);
$subject = "Запрос на бронирование";
$subject = iconv ('utf-8', 'windows-1251', $subject);
$message = "<html>"
  . "  <head>"
  . "  <title>Запрос на бронирование</title>"
  . "  </head>"
  . "  <body>"
  . "  <p>Номер: ".$_POST['Bron']."</p>".
  "<p>Время: ".$_POST['timeBron']."</p>".
  "<p>Имя: ".$_POST['nameBron']."</p>".
  "<p>Телефон: ".$_POST['telBron'].
  "</p>"
  . "  </body>"
  . "</html>";
$headers  = "Content-type: text/html; charset=windows-1251\r\n";
$headers .= "From: Заказчик <[email protected]>\r\n";
$message = iconv ('utf-8', 'windows-1251', $message);
$headers = iconv ('utf-8', 'windows-1251', $headers);
if (mail($to, $subject, $message, $headers)) {
  echo("sent");
}

И еще вопрос, в заголовк From нужно писать то что в php.ini в строке sendmail_from?
sent выводится, но почта не приходит. Пробовал mail, yandex, gmail. Подскажите кто нибудь.
 

fredwriter

Новичок
Оказывается в Denver заглушка стоит на sendmail, нужно её как-то убрать. А так-то у меня все работает писем в Z:\tmp\!sendmail аж 26))).
 

fredwriter

Новичок
Всё, теперь всё работает, установил реальный sendmail, настроил на smtp яндекса и прочувствовал волшебство, пришло письмо, ура!
 

fixxxer

К.О.
Партнер клуба
Делать перекодировку из utf-8 совершенно не обязательно, можно прекрасно в заголовке Content-Type указать utf-8.

А вот заголовки письма (subject/from/to - это тоже заголовки) не могут содержать что-либо, кроме латиницы. Чтобы отправлять там кириллицу (не важно, в какой кодировке), надо заголовки кодировать в base64 или quoted-printable.

http://www.phpfaq.ru/mail
 

fredwriter

Новичок
Делать перекодировку из utf-8 совершенно не обязательно, можно прекрасно в заголовке Content-Type указать utf-8.

А вот заголовки письма (subject/from/to - это тоже заголовки) не могут содержать что-либо, кроме латиницы. Чтобы отправлять там кириллицу (не важно, в какой кодировке), надо заголовки кодировать в base64 или quoted-printable.

http://www.phpfaq.ru/mail
Насчет перекодировки, это я не для письма я для вывода. А насчет заголовков у меня всё правильно пришло, без абракадабры. Или это не имеет значения как пришло, главное, что нужно кодировать в base64 или quoted-printable?
 

fixxxer

К.О.
Партнер клуба
Почтовые клиенты умные, и стараются вытащить информацию из битых заголовков. Но, по-первых, не все это делают и не всегда правильно, а во-вторых, они имеют полное право показать вместо кириллицы вопросики или ничего. Charset в Content-Type указывает кодировку тела письма, а для заголовков кодировка еще не определена (она известна только после чтения заголовков, а заголовок content-type - это тоже заголовок, и он еще не прочитан) - так что если это надо сделать, то это делается прямо в заголовке в специальном формате, пример которого можно увидеть на phpfaq.ru/mail, или просто посмотрев в исходный код письма, отправленного нормальным почтовым клиентом.
 

fixxxer

К.О.
Партнер клуба
А еще лучше взять готовую библиотеку, где все это реализованно и дает более-менее удобный API.
http://swiftmailer.org/docs/messages.html например
Лучше-то оно лучше, но сначала надо разобраться в формате почтового сообщения.

В здравом уме вручную через сокеты http-запросы тоже никто не шлет, но знать, как это сделать, необходимо. Тут так же.
 
Сверху