Проблемы с mail в php. Что я делаю не так?
Здравствуйте! Есть проблема. Написал код обратной связи, но письмо не отправляется, подскажите где проблема
HTML:
<form action="mail.php" method="post"> Ваше полное имя: <input type="text" name="name" required><br><br> Введите E-mail:<input type="email" name="email" placeholder="E-mail" required><br><br> Выберете тип вашего приложения:<select name="type" required> <option disabled selected>Выберете тип вашего приложения</option> <option valvue="1">Вэб</option> <option valvue="2">Exe</option> <option valvue="3">Test</option> <option valvue="4">Test</option> <option valvue="5">Test</option> </select><br><br> Введите комментарий (до 200 символов):<textarea name="comment" maxlength="200"></textarea><br><br> <button type="submit">Отправить на модерацию</button> </form> |
<form action="mail.php" method="post"> Ваше полное имя: <input type="text" name="name" required><br><br> Введите E-mail:<input type="email" name="email" placeholder="E-mail" required><br><br> Выберете тип вашего приложения:<select name="type" required> <option disabled selected>Выберете тип вашего приложения</option> <option valvue="1">Вэб</option> <option valvue="2">Exe</option> <option valvue="3">Test</option> <option valvue="4">Test</option> <option valvue="5">Test</option> </select><br><br> Введите комментарий (до 200 символов):<textarea name="comment" maxlength="200"></textarea><br><br> <button type="submit">Отправить на модерацию</button> </form>
mail.php:
<?php if($_POST['type'] == 1) { $subject = 'Вэб'; } elseif($_POST['type'] == 2) { $subject = 'Exe'; } elseif($_POST['type'] == 3) { $subject = '3'; } elseif($_POST['type'] == 4) { $subject = '4'; } elseif($_POST['type'] == 5) { $subject = '5'; } else { $subject = 'НЕ ВЫБРАНО'; } $to = "******"; $from = $_POST['email']; $message = $_POST['comment']; if(mail($to, $subject, $message)) { echo "Ваша разработка отправлена на модерацию"; } else { echo "Не отпр"; } ?> |
<?php if($_POST['type'] == 1) { $subject = 'Вэб'; } elseif($_POST['type'] == 2) { $subject = 'Exe'; } elseif($_POST['type'] == 3) { $subject = '3'; } elseif($_POST['type'] == 4) { $subject = '4'; } elseif($_POST['type'] == 5) { $subject = '5'; } else { $subject = 'НЕ ВЫБРАНО'; } $to = "******"; $from = $_POST['email']; $message = $_POST['comment']; if(mail($to, $subject, $message)) { echo "Ваша разработка отправлена на модерацию"; } else { echo "Не отпр"; } ?>
P.S. Если что про case я знаю)
Дополнительно:
valvue
Отправляемое письмо должно содержать заголовок From. Его устанавливают через параметр additional_headers или задают значение по умолчанию в файле php.ini.
- Не стоит использовать http:// на публичных ресурсах, а только https://
- Не стоит коммитить пароли и токены доступа в Git
- Не стоит использовать везде один и тот же простой пароль
- Не стоит публично критиковать начальство и волшебную спецоперацию
- Не стоит использовать функцию mail() в PHP, а использовать вместо этого SMTP в PHPMailer
- Не стоит использовать функцию mail() в PHP, а использовать вместо этого SMTP в PHPMailer
По какой причине? Зачем использовать SMTP, когда мейлер настроен?
Поэтому, рассылать письма нужно из доверенного источника (сервиса), который можно использовать как раз через SMTP.
А если он не настроен корректно, то и подключение по SMTP не даст вам никаких преимуществ в доставке.
! РЕШЕНИЕ ОБНАРУЖЕНО(благодаря комментариям) !
1. не valvue а valve
2. у моего хостера (если вдруг интересно то sweb.ru) на тестовых аккаунтах отключена эта функция
ВСЁ СЕЙЧАС РАБОТАЕТ!
- Странно, что с valve работает, когда должно быть value
Ответы:
var_dump($_POST);
PS: Ладно, ждать подробностей долго, по этому кратко по основам.
mail() будет работать в случае если у вас, помимо прочего, настроена отправка почты через smtp сервер, который либо у вас установлен локально (в чем есть сомнения), либо вы запускаете скрипт в среде уже настроенной (например у хостера с поддержкой отправки почты). В противном случае эта функция просто бесполезна. Так же, mail() возвращает true не в случае отправки почты, а в случае успешной постановки в очередь отправки, что саму отправку совершенно не гарантирует.
- К собственно отправке это не имеет отношения
у него винда же - Ипатьев, насчет винды это же пальцем в небо? ) А так хоть отладке научится базовой, то проверит, это, глядишь и до подробностей дойдет )
- Это логика. Элементарная. Но спорить не буду. Местные гуру настолько забронзовели, что кроме себя все равно никого не слышат.
- Ипатьев,
Это логика. Элементарная.
Это предположение. Хорошее, возможно даже верное, но не относящееся к логике.
Местные гуру настолько забронзовели, что кроме себя все равно никого не слышат.
Почему, слышат, и даже слушают иногда, когда в коментарии есть логика или указание на очевидные ошибки.
- Ипатьев,
у него винда же
Кстати, а как бы повлияло наличие макоси или линукса на отправку?
- ThunderCat, если что у меня вообще хостинг))
- Александер фон Крюков-Беллинсгаузен-Магеллан-Демид..., В ответе все написано. Либо пытайте хостера (что не гарантирует положительного ответа от него), либо используйте нормальные инструменты по типу PHPMailer/SwiftMailer...
- ThunderCat, позвольте внести поправку:
Please, move to Symfony Mailer at your earliest convenience. Symfony Mailer is the next evolution of Swift Mailer. It provides the same features with support for modern PHP code and support for third-party providers.
т.е. SwiftMailer - всё! Кутья и белые тапочки.
Источник - ThunderCat, хорошо, начнем с пыток хостера
- Александер фон Крюков-Беллинсгаузен-Магеллан-Демид..., обошлись паяльником) по умолчанию у них это отключено, но ЛИЧНО ДЛЯ МЕНЯ они ее врубили)
- Mylistryx, возникла другая проблема))) кодировка письма, он отправляет белеберду, и как ее установить я хз(мне 12 лет)
- Кодировка. Сейчас общепринятой для web считается utf-8, возможно вы пишете в cp1251 (ну не в KOI-8). Т.е. проверяем кодировку файлов. Какая среда разработки (IDE)? OpenServer/Docker/Wamp/Lamp - в каком окружении работаете?
То, что Вам 12 лет -я понял из других вопросов (читал, не отвечал, т.к. ответ уже был дан).
Функция mail() - это то, что не стоит использовать сейчас. Книги (и "одаренные" преподаватели, которые учились по этим книгам) уже давно потеряли свою актуальность. Если не использовать библиотеку-обертку типа SymfonyMailer - скорее всего отправку письма (25 SMTP порт) заблокирует уже Ваш хостер, а при получении респондентом письмо с вероятностью в 99.99% попадет в спам или будет просто "отброшено". - Mylistryx, тут важнее даже не какую кодировку использовать, а какую указывать. SMTP - один из самых древних протоколов, которые до сих пор используются. И там могут быть очень странные умолчания. Так что в любом случае надо указывать кодировку явно, а не надеяться на то, что автоматом будет распознана современная.
При этом использовать-то как раз можно любую - хоть KOI-8.
И в этом смысле на этапе обучения наоборот полезно пощупать как оно там изнутри устроено, с помощью той же mail. Тем более что порт ему уже открыли. Другое дело что юноша ленив, и не хочет набрать в браузере три слова, php mail кодировкаНу и книги книгам рознь, не стоит огульно хаять сразу все. У Джона Дакетта вполне себе рассматривается PHPMailer, целая глава отведена, и даже про указание кодировки не забыто :)
- Александер фон Крюков-Беллинсгаузен-Магеллан-Демид..., заголовок письма или и тело письма тоже?
Функция mail() на шаред хостингах обычно запрещена.
Чтобы при проникновении трояна на ваш сайт не рассылали спам.
Дальше идут варианты. Можно самому ее разрешить и настроить или нет.
А потом головная боль, чтобы письмо хотя бы в папку спам попадало.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема с отправкой электронной почты в PHP может возникнуть по разным причинам. Одной из наиболее распространенных причин может быть неправильная настройка сервера или неправильно составленное письмо. Для того чтобы отправить письмо с помощью PHP, можно использовать функцию mail().
Вот пример кода, который демонстрирует отправку письма с помощью функции mail():