Виктор Т.
1036 повідомлень
#14 років тому
Здравствуйте, коллеги!

Помогите кто чем может, сломал всю голову уже.
Есть код, так, как он написан сейчас, он работает нормально:
<?php
define(REPORT_MAIL, '***');
if (isset($_POST, $_POST, $_POST)) {
$plugin = trim($_POST);
$note = trim($_POST);
$version = trim($_POST);
$act = trim($_POST);
$mailBody = "";
switch($act){
case "plugin_error":
$topic = "Ошибка в плагине ";// . $plugin;
$mailBody .= "Плагин: " . $plugin;
$mailBody .= "\r\n";
break;
case "program_error":
$topic = "Ошибка в программе";
break;
case "plugin_request":
$topic = "Запрос нового плагина";
break;
case "feature_request":
$topic = "Запрос новой функции";
break;
};
$headers = "From: ***\r\n";
$headers .= "Content-type: text/plain; charset=UTF-8\n";
$mailBody .= "Версия: " . $version;
$mailBody .= "\r\n";
$mailBody .= 'Сообщение: ' . $note;
$mailBody .= "\r\n";
mail(REPORT_MAIL, $topic, $mailBody, $headers);
echo "SUCCESS";
}
?>

Но если в 11 строчке убрать комментарий, вот так:
$topic = "Ошибка в плагине "  . $plugin;

То сообщение на почту не отсылается.

Самбади хэлп!
Максим Ф.
3195 повідомлень
#14 років тому
А если так:
$topic = "Ошибка в плагине "  . $plugin . "";

?

upd:
А в $plugin все символы "нормальные"?

upd2:
А если переприсвоить $plugin="123" - то как? На мой взгляд проблема в том, что в переменной содержится нечто, не соответствующее спецификации subject - см. php.net
Виктор Т.
1036 повідомлень
#14 років тому
Тоже нет. =(
Кирилл Е.
2817 повідомлень
#14 років тому
Sivis, думаю ваша проблема в самом почтовом сервере..

Например мой локальный мейл-сервер игнорирует письма без заголовка (не хедер, а заголовок письма), вот если он пуст, то как-бе ничего и не приходит, хотя и должно было.

Между строчкой 8 и 9 вставить строчку 8.5 )).. и написать типа
$topic = "Новое письмо от %username";

и всё
Александр К.
102 повідомлення
#14 років тому
$plugin в utf-8 попробуй перевести.
Виктор Т.
1036 повідомлень
#14 років тому
Цитата ("AlekartRu"):
а в $plugin все символы "нормальные"?

Да.
Цитата ("AlekartRu"):
а если переприсвоить $plugin="123" - то как?

Так же. То есть никак.
Цитата ("kirilev"):
Между строчкой 8 и 9 вставить строчку 8.5 )).. и написать типо
Код:1$topic = "Новое письмо от %username";
и всё

Не помогло.
Антон Е.
279 повідомлень
#14 років тому
А что вернет var_dump($_POST);
Кирилл Е.
2817 повідомлень
#14 років тому
Оффтопик
Цитата ("Sivis"):
Не помогло

Да, верно .. невнимательно прочитал первый пост
Вадим Т.
3240 повідомлень
#14 років тому
Для эксперимента, если попробовать:

mail(REPORT_MAIL, "Ошибка в плагине ", $mailBody, $headers);
mail(REPORT_MAIL, "Ошибка в плагине 123", $mailBody, $headers);
mail(REPORT_MAIL, "Error " . $plugin, $mailBody, $headers);

Что из этого будет работать?
Вадим Т.
3240 повідомлень
#14 років тому
Дело в том, что $subject (Вы назвали это $topic) должен быть определен согласно RFC 2047 (), см.

Попробуйте строку 31 заменить на:

mail(REPORT_MAIL, '=?UTF-8?B?'.base64_encode($topic).'?=', $mailBody, $headers);
Виктор Т.
1036 повідомлень
#14 років тому
Цитата ("tvv"):
mail(REPORT_MAIL, '=?UTF-8?B?'.base64_encode($topic).'?=', $mailBody, $headers);

Большое спасибо! Это помогло.
Если не сложно, поясните в чем была загвоздка? Никогда раньше не сталкивался с почтовыми протоколами.

Еще раз спасибо всем откликнувшимся!
Вадим Т.
3240 повідомлень
#14 років тому
Это не загвоздка, просто так оно должно быть по спецификации, если используете не ASCII кодировку.
Виктор Т.
1036 повідомлень
#14 років тому
А почему тогда раньше работало?
Вадим Т.
3240 повідомлень
#14 років тому
Вероятно, когда использовались только кириллические символы и пробелы, оно как-то преобразовывало по-своему, а потом, когда добавились другие символы — перестало, мало ли.
Так как если делать не по спецификации, то оно может или работать или не работать, зависит от версии PHP, от почтового сервера, настроек хостинга и т.д., и еще как повезет.
Это уже из области шаманства и танцев с бубном, и на это не стоит рассчитывать и как-то подгонять, чтобы работало таким образом.

А если же делать по спецификации, то должно работать в любом случае, без всякого шаманства, так что именно так и нужно делать.
Вадим Т.
3240 повідомлень
#14 років тому
Оффтопик
Кстати, начиная с PHP 5.2 для получения значений из $_GET, $_POST и т.д. рекомендуется использовать более продвинутый и безопасный способ:
Вот статья на эту тему: ]http://www.phparch.com/2010/07/08/never-use-_get-again/
Виктор Т.
1036 повідомлень
#14 років тому
Хороший способ, возьму на заметку.