Форум программистов, компьютерный форум, киберфорум
PHP
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25

Почему функция PHP mail() не работает с переменными

24.12.2016, 11:18. Показов 2264. Ответов 25

Студворк — интернет-сервис помощи студентам
Почему функция PHP mail() не работает с переменными
Например:
Пробовал mail("test@mail.com","test") - работает,
mail($mail,$msg) - не работает

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    //Аякс отправка форм
    //Документация: [url]http://api.jquery.com/jquery.ajax/[/url]
    $("#callback").submit(function() {
        $.ajax({
            type: "GET",
            url: "mail.php",
            data: $("#callback").serialize()
        }).done(function() {
            alert("Спасибо за заявку!");
            setTimeout(function() {
                $.fancybox.close();
            }, 1000);
        });
        return false;
    });
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
$recepient = "yourmail@mail.com";
$sitename = "Имя сайта";
 
$pname = trim($_GET["pname"]);
$name = trim($_GET["name"]);
$phone = trim($_GET["phone"]);
 
$pagetitle = "Новая заявка с сайта \"$sitename\"";
$message = "Имя: $name \nТелефон: $phone";
 
mail($recepient, $pagetitle, $message, "Content-type: text/plain; charset=\"utf-8\"\n From: $recepient");
?>
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.12.2016, 11:18
Ответы с готовыми решениями:

не работает функция PHP mail()
Через консоль письмо отправляется и приходит на почту: l72:~ # telnet localhost 25 Trying ::1... telnet: connect to address ::1:...

Ajax и Php-функция Mail()
Есть простой скрипт на php для отправки почты: &lt;?php $email = &quot;shift.mail@yandex.ru&quot;; $headers = &quot;From:...

Php mail. Функция отправки сообщения
Привет всем. Возник такой вопрос. Указываю три основных переменных при отправке письма: $to = &quot;sobaka@admin.com&quot;; $subj =...

25
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 11:32
Работает. Кирилицу/UTF в тайтле нужно кодировать.

Добавлено через 3 минуты
UTF в теле сообщения – тоже.
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
24.12.2016, 11:35  [ТС]
miketomlin, в html уже указана кодировка. - не представляю куда её ещё можно добавить?
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 11:36
Я написал, что нужно сделать.

Адреса To и From совпадают.
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
24.12.2016, 11:39  [ТС]
в теле сообщения тоже есть

Добавлено через 2 минуты
miketomlin, так должно быть.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 11:47
Для тайтла есть спец. формат, в котором прямо в строке задается исходная символьная кодировка и способ кодирования.

Для определения способа кодирования тела сообщения используйте заголовок Content-Transfer-Encoding.

Добавлено через 6 минут
В соответствии со спеками разделителем является "\r\n". Ваш вариант имеет право на существование, если используемый софт выполняет подмену "\n" на "\r\n".
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
24.12.2016, 11:47  [ТС]
miketomlin, можете выслать пример или документацию по случаю.Я как понял, я не первый допускаю ошибки в кодировке.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 11:54
Нету. Можете поискать на форуме по моему нику и какому-нибудь подходящему ключу. На подобные вопросы я отвечал неоднократно.

Добавлено через 2 минуты
...ключ UTF попробуйте.
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
24.12.2016, 12:02  [ТС]
miketomlin, попробовал
PHP
1
2
3
4
 
$headers  = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
$headers .= "From: $from\r\n";
не помогло
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 12:10
Это реакция на мои дописки. Вы основной проблемой займитесь.

Добавлено через 3 минуты
PHP
1
$subject='=?UTF-8?B?'.base64_encode('Привет').'?=';
Для тела сообщения можно использовать эту же ф-цию кодирования и обернуть результат ф-цией chunk_split.

Добавлено через 1 минуту
В заголовке Content-Transfer-Encoding укажете кодировку base64.
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
24.12.2016, 17:46  [ТС]
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$name = trim($_POST["name"]);
$phone = trim($_POST["phone"]);
 
var_dump($name,$phone);
 
$pagetitle = '=?UTF-8?B?'.base64_encode("Новая заявка с сайта \"$sitename\"").'?=';
$message = '=?UTF-8?B?'.base64_encode("Имя: $name \r\nТелефон: $phone").'?=';
 
$headers  = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
$headers .= "Content-transfer-encoding: base64";
$headers .= "From: $from\r\n";
 
mail($recepient, $pagetitle, $message, $headers);
Через var_dump проверил есть ли данные($name и $phone), да есть.
Теперь отправляет, но выдает такую кодировку:
Миниатюры
Почему функция PHP mail() не работает с переменными  
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 17:58
Все правильно. Указанный способ представления только для тайтла используется. Что делать с телом сообщения я отдельно написал. Такое ощущение, что вы читаете через строчку.

Добавлено через 2 минуты
Применительно к телу сообщения я писал про используемую функцию, а не про используемый способ.
0
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
24.12.2016, 18:01  [ТС]
miketomlin, т.е так chunk_split('=?UTF-8?B?'.base64_encode("Имя: $name \r\nТелефон: $phone").'?='); ?
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 18:06
Лучший ответ Сообщение было отмечено rossental как решение

Решение

Оставьте в параметре только ф-цию base64_encode.
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
24.12.2016, 18:26  [ТС]
miketomlin, Спасибо, желаю удачи и счастья в новом году!
Итог:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$pname = trim($_GET["pname"]);
$name = trim($_GET["name"]);
$phone = trim($_GET["phone"]);
 
var_dump($name,$phone);
 
$pagetitle = '=?UTF-8?B?'.base64_encode("Новая заявка с сайта \"$sitename\"").'?=';
$message = "Имя: $name \r\nТелефон: $phone";
$headers  = "MIME-Version: 1.0\r\n"; 
$headers .= "Content-type: text/plain; charset=utf-8\r\n";
$headers .= "Content-transfer-encoding: base64;";
$headers .= "From: $from\r\n";
 
mail($recepient, $pagetitle, $message, $headers);
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 18:35
Куда делись chunk_split(base64_encode(...))?

Добавлено через 1 минуту
После base64 нужна не точка с запятой, а разделитель строки.

Добавлено через 2 минуты
В конце последнего заголовка (From) разделитель не нужен. Он будет добавлен автоматически.
0
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
24.12.2016, 18:37  [ТС]
miketomlin, chunk_split в итоге не понадобился. Не знаю почему так.
А \r\n после base64, почему то перекрывал строку с from и в итоговом письме вылезало "Неизвестный отправитель" вместо имени хоста(домена).
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 18:45
Цитата Сообщение от rossental Посмотреть сообщение
chunk_split в итоге не понадобился
Если работает и без нее, это не означает, что без нее правильно. Допустим, ваше короткое сообщение умещается в одну строку, но если вы в будущем его немного расширите, то функция начнет выполнять свою роль, а у вас ее не будет.

Цитата Сообщение от rossental Посмотреть сообщение
А \r\n после base64, почему то перекрывал строку с from и в итоговом письме вылезало "Неизвестный отправитель" вместо имени хоста(домена).
Покажите, что получилось.

Добавлено через 2 минуты
Почтовые клиенты и ПС в большинстве своем нормально воспринимают длинные строки, но это не означает, что можно отходить от спецификаций.
1
0 / 0 / 0
Регистрация: 13.10.2013
Сообщений: 25
24.12.2016, 18:48  [ТС]
miketomlin, верхнее письма - ставил \r\n вместо ";"
нижние - без \r\n
Миниатюры
Почему функция PHP mail() не работает с переменными  
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
24.12.2016, 18:52
Код покажите с исправлениями, который, по вашим словам, работает неправильно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2016, 18:52
Помогаю со студенческими работами здесь

Не работает функция mail()
Здравствуйте. После переноса сайта на VPS - не отправляет письма функцией mail(). Настройки, вроде все поменял в php.ini. Скрипт: ...

Не работает функция mail
Добрый вечер, подскажите, почему не присылается письмо? Ни локально, ни на хостинге.. В чем мой косяк? &lt;?php $name =...

не работает функция mail()
отправляю письмо себе на ящик $result = mail('rembo-87@yandex.ru', 'Hello!', 'Hello this is a test of email'); делаю проверку ...

Не работает функция mail()
Всем привет!:) Помогите, не работает функция mail() - письма не приходят в mail.ru, gmail. В чем может быть проблема?

Не работает функция mail()
не работает функция mail()! подскажите, может под неё надо как-то соответственно пхп настроить? Помогите, очень надо!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru