Нужен совет по PHP
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
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";
и всё
Не помогло.
2817 повідомлень
3240 повідомлень
#14 років тому
Для эксперимента, если попробовать:mail(REPORT_MAIL, "Ошибка в плагине ", $mailBody, $headers);
mail(REPORT_MAIL, "Ошибка в плагине 123", $mailBody, $headers);
mail(REPORT_MAIL, "Error " . $plugin, $mailBody, $headers);
Что из этого будет работать?
3240 повідомлень
1036 повідомлень
#14 років тому
Цитата ("tvv"):mail(REPORT_MAIL, '=?UTF-8?B?'.base64_encode($topic).'?=', $mailBody, $headers);
Большое спасибо! Это помогло.
Если не сложно, поясните в чем была загвоздка? Никогда раньше не сталкивался с почтовыми протоколами.
Еще раз спасибо всем откликнувшимся!
3240 повідомлень
#14 років тому
Это не загвоздка, просто так оно должно быть по спецификации, если используете не ASCII кодировку.
3240 повідомлень
#14 років тому
Вероятно, когда использовались только кириллические символы и пробелы, оно как-то преобразовывало по-своему, а потом, когда добавились другие символы — перестало, мало ли.Так как если делать не по спецификации, то оно может или работать или не работать, зависит от версии PHP, от почтового сервера, настроек хостинга и т.д., и еще как повезет.
Это уже из области шаманства и танцев с бубном, и на это не стоит рассчитывать и как-то подгонять, чтобы работало таким образом.
А если же делать по спецификации, то должно работать в любом случае, без всякого шаманства, так что именно так и нужно делать.
3240 повідомлень
#14 років тому
Оффтопик
Кстати, начиная с PHP 5.2 для получения значений из $_GET, $_POST и т.д. рекомендуется использовать более продвинутый и безопасный способ: посилання
Вот статья на эту тему: ]http://www.phparch.com/2010/07/08/never-use-_get-again/
Вот статья на эту тему: ]http://www.phparch.com/2010/07/08/never-use-_get-again/