Как через форму загрузить файл и отправить на почту


Содержание материала:

Форма обратной связи с вложением (прикрепляется файл) | HTML и PHP

Это результат объединения статей:

  • Форма обратной связи PHP
  • Прикрепить файл к письму PHP
  • Multiple files

* форма не работает намеренно, присутствует для того, чтобы можно было оценить внешний вид, пощёлкав по кнопкам.

Особенности:

  • Внешний вид:
    • форма по прежнему резиновая, но теперь наименования пунктов располагаются слева (см. свойство float),
    • при нажатии на label фокус получает соответствующий input,
    • при наведении курсора мышки на поле, его границы становятся голубыми, при фокусе — бледно-голубыми,
    • правильно заполненные поля будут темнеть.

    Если нужен вид из предыдущей формы, то следует заменить содержимое тега style: .

  • Поддержка от IE10 включительно.
  • Проверка на правильность заполнения полей осуществляется не на стороне сервера.

Ниже представлены два варианта скрипта отправки данных с сайта на почту: с Javascript (Ajax) и без.

1. Форма связи позволяет отправить несколько изображений и др.файлов без перезагрузки страницы

  1. PHP вынесен в отдельный файл
  2. при нажатии клавиши F5 форма не будет отправлена снова
  3. после отправки формы страница не будет перезагружена

Файл contacts.html

Файл contacts.php

2. Форма связи в одном файле

Рекомендации к скрипту отправки файлов на почту

  1. нужно заменить свой@yandex.ru
  2. нужно заменить contacts.php на полный адрес, например, http://сайт.ru/папка/папка/contacts.php
  3. серые заголовки лучше убрать. Они меняют адрес хостинга на тот, что посетитель указывает в форме. Но некоторые почтовые сервисы (например, Яндекс.Почта) при их наличии не присылают письма вовсе
  4. для того, чтобы добавить новое поле, нужно внести изменение в HTML и PHP код. Другими словами, добавить те же участки, что и для messageFF
  5. для того, чтобы настроить прикрепление только одного файла, следует убрать всё выделенное. По умолчанию прикреплять можно несколько файлов
  6. для того, чтобы можно было прикреплять только определённый тип файлов, в input прописывается атрибут accept. По умолчанию неважно что прикреплять: картинки, видео или документы

Скорее всего письма будут падать в СПАМ папку, поэтому для них нужно создать правило. Скажем, так это делается в Яндекс.Почте:

Если на хостингах выключена функция mail() (галка может именоваться «sendmail_from»), то скрпт работать не будет. Так как по факту email отправляется с электронного ящика хостинга.

127 комментариев:

Виталий Здравствуйте, подскажите пожалуйста как поставить эту форму на сайт (wordpress). Просто скопировать код и вставить на страницу? Форма отображается, но и первая часть кода, где нужно изменить емаил на свой тоже отображается. Или первую часть кода нужно разместить в файле на сервере? Виталий Положил первую часть кода в файл mail.php и поместил его в папку с темой шаблона, чтобы можно было редактировать из админки.. изменил емаил на свой, но сообщения не приходят. ( Виталий И еще бы хотелось чтобы после отправки сообщения внизу или где нибудь писалось»ваше сообщение отправлено. спасибо» чтобы человек был уверен в отправке..как такое реализовать? NMitra Здравствуйте, я далека от WP. Попробуйте посмотреть папку wp-content/themes/ваша_тема, а именно файл page.php. Сообщение есть и оно появляется, если верно код разместить. Вячеслав Спасибо! Хорошая форма. NMitra Рада слышать! Владимир Телевной Здравствуйте. Ваш сайт безусловно хорош. Форма данная тоже. Но только вот вопрос можно ли реализовать прикрепление нескольких файлов. И желательно чтоб это делалось путем перетаскивания файла на форму. Что то типа этого http://www.manhunter.ru/demo/upload.html (это демонстрация), источник http://www.manhunter.ru/webmaster/712_zagruzka_faylov_peretaskivaniem_v_okno_brauzera.html

Спасибо заранее =) Владимир Телевной P.S.
Желательно чтоб было реализовано все на столько же просто как данная форма. Т.к. я не просто ноль, а ноль с большим минусом. И мои знания ограничиваются копировал-вставил. NMitra Здравствуйте, я боялась этого вопроса )) Пока нет времени написать полноценное решение и толком разобраться. Нужно объединить:

http://habrahabr.ru/post/120370/
http://www.emanueleferonato.com/2008/07/22/sending-email-with-multiple-attachments-with-php/
http://www.w3schools.com/html/html5_draganddrop.asp Владимир Телевной Будем ждать полноценного решения. Спасибо за ответ. Александр Как бы ещё его заставить вызываться в модальном окне? 🙂 NMitra Как содержимое любого модального окна можно сделать, например, этого http://shpargalkablog.ru/2011/02/modalnoe-okno-css.html Александр А как бы подправить форму, чтобы сообщение об успешной отправке было отдельно? дело в том, что при такой форме достаточно нажать F5 и письмо сваливается снова. Так можно и весь ящик замусорить. Ну или проверку какую-нибудь защитную добавить? NMitra Здесь http://shpargalkablog.ru/2014/01/feedback-form.html пример с XMLHttpRequest()
Или посмотрите тут http://shpargalkablog.ru/2013/08/bell-site.html

php практически везде одинаковый, работает благодаря функции mail Владимир Электрик как сделать чтобы отправлять сразу 6 файлов подряд
. NMitra Владимир, помню, уже спрашивали, но никак не могу с собой бороться. Есть либо знания (ответ на комментарий на автомате, требует малое время), либо большой интерес к теме (пишется новая статья-ответ), либо финансовый стимул. Ссылки на материал по теме в комментарии 9. Sfera Не хватает обязательного поля Телефон Анонимный Подскажите, если отправляю письмо без прикрепленного файла выходит ошибка:
«Warning: file_get_contents() [function.file-get-contents]: Filename cannot be empty in.
Warning: Cannot modify header information — headers already sent by (output started at. «
Как разрешить отправлять без прикрепленного файла? NMitra Посмотрю на следующей недели. Анонимный NMitra, все еще актуально, Как разрешить отправлять без прикрепленного файла?
Спасибо NMitra Хм, а у меня все отправляется. http://img.shpargalkablog.ru/1.html NMitra Поэтому подсказывайте, что выдает у вас, если сделать так:

Анонимный Подскажите как сделать чтобы можно было прикрепить несколько файлов? Анонимный Подскажите как добавить защиту от спама? NMitra Фильтра по IP в большинстве случаев хватает. Чтобы его узнать, следует строку

$message = «Имя: «.$_POST[‘nameFF’].»\nEmail: «.$from.»\nСообщение: «.$_POST[‘messageFF’];

$message = «Имя: «.$_POST[‘nameFF’].»\nEmail: «.$from.»\nСообщение: «.$_POST[‘messageFF’].»\nIP: «.$_SERVER[‘REMOTE_ADDR’];

Затем при обнаружении IP, рассылающего спам

mail($to, $subject, $message, $headers);

if($_SERVER[«REMOTE_ADDR»] != 0.000.000.000) <
mail($to, $subject, $message, $headers);
> Анонимный Отличная, красивая форма, понятный код, очень помогло, спасибо! NMitra Благодарю за отзыв! Анонимный Как это работает? Куда все это вставлять? В примере с обычной обратной связью был отдельный файл contcts.php, а тут все вместе. Делают также с этим примером, но почему-то при отправке выдает ошибку Method Not Allowed
The requested method POST is not allowed for the URL /demo/index.html Анонимный Вроде разобрался. Задал форме action, письма приходят. Но почему-то вместе диалоговго окна об ошибке или успехе переводит на пустую страницу. NMitra Будет время тоже переделаю на XMLHttpRequest
Вам нужно создать страницу с расширением .php и весь код в неё добавить или подключить php на HTML страницах (служба поддержки хостера должна подсказать как, чаще добавляется строка в .htaccess) Анонимный Если приложить 2 файла общим весом менее 10 мб, то письмо не отправляется, типо, превышен лимит в 10 мб. NMitra Вместо

if ($filesize Анонимный Спасибо. Только функцию по проверке веса все-таки тоже хотелось бы иметь. NMitra if ($filesize Анонимный Здравствуйте, письма приходят, но картинки не отображаются, вместо них набор букв-цифр NMitra Здравствуйте, попробуйте упрощённый вариант http://shpargalkablog.ru/2014/05/email-file-php.html Но скорее всего и он не будет работать: проблема или в хостере (именно с его ящика приходят письма), или в почтовом клиенте. У вас где находится почтовый ящик (программа/сервис)? Анонимный весьма полезный блог, спасибо за подробный разбор этой темы, форму с прикреплением файла именно с вашего блога использовала много раз. NMitra Спасибо за отклик! Анонимный Странно, но никто не нашел ошибку скрипта! NMitra Поделитесь, пожалуйста Анонимный Она уже была замечена. Но не донесена должным образом. К сути, если крепишь файл объемом до 1Мб и более 2-х тогда считается сумма файлов в байтах, т.е. она превысит 10000000 если закрепить их по 1-му килобайту. От 1Мб вроде норм. Как обойти этот недочет? Анонимный Так что вы скажите? Каков ваш будет положительный ответ? NMitra Плаваю я в этих байтах. Итак,

килобайт (КБ) = 1024 байта
мегабайт(МБ) = 1024 килобайта

10 МБ = 10485760 байт (тут всё сравнительно верно)

А дальше не поняла. Прикрепляются два файла по 1 МБ, в итоге сумма получается 2МБ. Но форма выдаёт ошибку, что превышен размер? Анонимный Хорошо, для пущей продуктивности беседы. Уже предметнее приложу скрин, вот значение http://s017.radikal.ru/i419/1505/57/bde886d658a0.jpg которые будет в результате прикрепления 2-ух файлов общим весом 176Кб Анонимный А это уже если файл весит 6Мб http://s013.radikal.ru/i323/1505/5e/43ee22f10e0d.jpg — теперь понимаете о чем я? Анонимный Ну и чтоб уж исчерпывающая инфо. — это результат 2-ух файлов более 1-го Мб в сумме 7Мб http://s019.radikal.ru/i619/1505/34/fa139891d090.jpg NMitra Поняла, $_FILES[‘fileFF’][‘size’] передаёт строку, а нужно число. NMitra Попробуйте, поправила Анонимный Можно вашу почту, аську или скайп? NMitra [email protected] Анонимный Приходят знаки вопросов вместо имени. Где то надо указать кодировку? NMitra Попробуйте вместо

$subject = «Заполнена контактная форма с «.$_SERVER[‘HTTP_REFERER’];

$subject = ‘Заполнена контактная форма с ‘.$_SERVER[‘HTTP_REFERER’];
$subject = «=?utf-8?b?». base64_encode($subject) .»?=»; Анонимный Спасибо за код, очень полезен. но вот возникла загвоздка.

Письма отправляются без проблем, но вложений нет, подскажите в чем загвоздка, или это проблема в хостинге и нужно настроить разрешение на запись? NMitra Извините, не назову причины NMitra Попробуйте потестировать более простые вариант
1) http://shpargalkablog.ru/2015/02/multiple-files-php.html
2) http://shpargalkablog.ru/2014/05/email-file-php.html Анонимный А не может быть проблемы в скрипте? Я взял его из темы об отправке письма без вложения, так как в этой статье скрипта по отправке нет после формы, не нужно ли что то в скрипт отправки что нибудь добавить из-заа добавления отправки файла? NMitra Угу, скрипт PHP разный, также в той форме я использовала XMLHttpRequest(), а в этой нет. Не стала разбираться как через XMLHttpRequest() передать данные о файле. Анонимный поработал на стороне хостинга, файлы стали оправляться, но они не читаемы, можете подсказать как это поправить? NMitra Честно говоря, не могу. Какой почтовый сервис? Попробуйте отправить на Яндекс.Почту. Анонимный Спасибо. В итоге проблема была в почте на хостинге, которая на основе нашего домена, на яндекс почте открылся файл без проблем, как и на туже почту но не в веб браузере а полученные через почтовую программу. Большое спасибо Вам за помощь и за скрипт. sergey как сделать только html код такой формы и добавить свой mail NMitra «как сделать только html код такой формы» — Уберите всё до

email нужно добавлять в php Анонимный Как реализовать такую же форму, но с записью данных полей в файл doc(rtf) и отправкой этого файла на почту? NMitra Извините, не подскажу ответа — не было необходимости разбирать ваш вопрос ранее 🙁 Анонимный подскажите как добавить еще строки, телефон,
адрес Анонимный Все работает, но почему-то вложение не приходит на мобильный телефон. В чем может быть проблема? NMitra Проблема может быть в почтовом клиенте. Для увеличения скорости работы он может отключить показ изображения. Если на компьютере показывается письмо полностью, а на мобильном в том же почтовом клиенте без изображения, то я бы написала письмо в службу поддержке почтового клиента. Анонимный Извините, если тема актуальна еще. Ставлю на joomla 2.5. Нажимаю отправить — открывается пустое окно ,а точнее выкидывает на страницу с названием файла php, куда скопировала код. При этом на почту приходит сообщение. NMitra Угу, POST выполняется. Данный пример предполагает, что php и html должны быть в одном файле. Иначе нужно делать через XMLHttpRequest() как тут http://shpargalkablog.ru/2014/01/feedback-form.html только с другой кодировкой Анонимный Спасибо! Попробую. А то очень хочется, чтобы заработало, хорошая и удобная форма. Анонимный К сожалению не получится, joomla режет код в редакторе, а как по файлам правильно разнести, я не поняла. Анонимный И вариант с другой формой не пройдет. Joomla режет любой код скрипта в редакторе. NMitra Тогда делайте редирект с php файла как тут http://shpargalkablog.ru/2013/08/bell-site.html NMitra Если делать без задержки, то посетитель лишь увидит что страница перезагрузилась Александр Стрельченко Доброй ночи!
Подскажите, пожулайста, в какую сторону «копать» ?
С PHP не имел дела ранее, но знания js помогли правильно разобраться во внедрении Вашего обработчика.
В итоге письмо после submit пришло всего два раза (причем, на разные адреса по одному разу. менял, думал беда в почтовиках).
Alert срабатывает каждый раз «успешно».
Заранее благодарю за помощь! Возможно, исходник нужно прикрепить, чтобы Вы смогли понять.
С уважением, Александр. NMitra Доброе утро!
Попробуйте удалить заголовки:

$headers .= «From: » . $from . «\r\n»;
$headers .= «Reply-To: » . $from . «\r\n»;

У меня с ними тоже Яндекс режет письма. Александр Стрельченко Здравствуйте еще раз.
Заголовки эти сразу удалил и не использовал.

Оставил только эти два:

$headers = «MIME-Version: 1.0\r\n»;
$headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\»\r\n»;

Возможно, еще в где-то проблема может быть? NMitra Это нужно.
Попробуйте второй вариант, тоже самое, но почему-то лучше срабатывает.
А форма без файлов нормально работает http://shpargalkablog.ru/2014/01/feedback-form.html ? Александр Стрельченко Второй вариант, это тот, в котором «Форма связи в одном файле»? Не пробовал его..
Без файлов пробовал до этого, но не по вашему шаблону. Срабатывала каждый раз. Александр Стрельченко Кстати, код для «Формы связи в одном файле» сразу при загрузке странички выдает алерт «Размер файлов превышает 10мб». Скопировал Ваш код один в один и проверил) Александр Стрельченко Доброй ночи еще раз.
Нашел логи с сервера и заметил ошибку наконец-то свою. Может кто-то когда-то столкнется с такой же ситуацией.
Конкретные строчки из лога:

PHP Warning: is_uploaded_file() expects parameter 1 to be string, array given in /путь/к/файлу/contacts.php on line 19, referer: http://ваш.сайт

Я делал прикрепление одного файла, а в html мой инпут имел такой вид:

Убрав скобки массива «[]» все заработало, при этом письма доходят моментально и с вложением.

В Вашей статье все грамотно отмечено цветом, что обязательно удалить нужно их, но я зря поторопился)))
Благодарю за Ваше решение!
NMitra Доброго утра, Александр. Большое спасибо, что написали! А то я бы гадала что да как. Кирилл Спасибо огромное Вам за данную форму. Установил. Все работает.
Но. Прошу помочь разобраться в одном недочете.
Ввели все данные, нажали отправить, получаем сообщение:»размер файлов превышает 10 мб».
В этой ситуации из поля «сообщение» пропадает ранее написанный текст. Это нехорошо. В остальных полях информация сохраняется.
Можно с этим что-то сделать? Александр Стрельченко Кирилл, чтобы ранее написанный текст не пропадал, удали эти события:

f.messageFF.removeAttribute(‘value’); // очистить поле сообщения
f.messageFF.value=»; // очистить поле сообщения NMitra Добавила дополнительное условие, попробуйте, при возможности, отпишитесь о результатах, сама не успела потестировать.

Александр, еще раз спасибо за активное участие! Кирилл Москвитин Спасибо.
Но можно как-то сделать, чтобы успешной отправке сообщения текст пропадал, а при ошибке оставался?
Сейчас остается и так, и так.
В принципе я и так доволен))
И еще вопрос..
Для работы формы без ошибок пришлось удалить .htaccess
А без него вроде как нельзя. Можете помочь? Кирилл А! И еще..)
При вынесении скрипта в отдельный файл страница перезагружается и форма не работает.
Это решаемо? NMitra Кирилл, я скрипт поправила (см. статью) при успешной отправке поле очистится, при ошибке — останется.

.htaccess удалять не стоит. Смотрите какое именно правило не даёт работать форме. Его (правило) можно ограничить одной страницей, расширением файла и т.п.

Вы имеете ввиду JS? NMitra «При вынесении скрипта в отдельный файл страница перезагружается и форма не работает.» — проверила, у меня работает. Вы верно указываете путь к файлу contacts.php? Виктор Загоруйко Подскажите, как после отправки письма и выдачи сообщения что все нормально отправилось сделать переход на главную или другую страницу сайта? Что и где нужно прописать? Александр Стрельченко Виктор, попробуй добавить в конце этих строк «location.href = «URL»; (как пример):

if (http.responseText.indexOf(f.nameFF.value) == 0) < // очистить поле сообщения, если в ответе первым словом будет имя отправителя
f.messageFF.removeAttribute(‘value’);
f.messageFF.value=»;
location.href = «/articles/blog/»; // это как пример ссылки — можешь указать в любом виде (http://google.com) или любую другую
>

Не тестировал, поэкспериментируй.
Возможно есть решения с помощью PHP, конечно. Кирилл Москвитин Спасибо огромное Вам за работу и поддержку!
Работает! Однако, поля имя и e-mail все равно остаются при успешной отправке. Но я в восторге)))
«При вынесении скрипта. » — сам файл .js забыл вынести на сервер)
В .htaccess я вообще не буль-буль..( Буду пыхтеть..
Виктор Загоруйко Александр, я уже перепробывал много вариантов, но почему то не получается. Как вы пишите — получается что выводит весь html код страницы))) в окне. Бился и по другим вариантам — никак не выходит. Кирилл В общем чего-то наделал с .htaccess и все заработало))) Надеюсь, надолго)
Еще раз спасибо за помощь!) Виктор Загоруйко NMitra, спасибо! Но не помогло. Вот страница сайта http://modulpicture.com/index.php?route=nnews/article&ncat=59&nnews_ > Виктор Загоруйко Проблема решилась! Всем спасибо.

P.S. Может кому понадобится — location.href = «ваш-сайт»; надо вставлять не вместо if (http.responseText.indexOf(f.nameFF.value) == 0) < // очистить поле сообщения, если в ответе первым словом будет имя отправителя
f.messageFF.removeAttribute(‘value’);
f.messageFF.value=»; или за этими строчками, а вот так if (http.responseText.indexOf(f.nameFF.value) == 0) <
f.messageFF.removeAttribute(‘value’);
f.messageFF.value=»;
>
>
>
location.href = «http://ваш_сайт»; Дмитрий Все замечательно работает, но прикрепить можно только один файл. Хоть и написано, что по умолчанию прикреплять можно несколько файлов. Помогите, пжл, мне обязательно нужна возможность прикреплять несколько фото. NMitra Можно прикреплять несколько файлов:
1) нажать кнопку
2) нажать на файл
3) нажать кнопку CTRL (или SHift, чтобы выделить идущие подряд файлы или нажатой правой кнопкой мышки выделить область из группы файлов)
4) нажать на другой файл

Это стандартная процедура. Можно как в Яндекс.Почте сделать, чтобы при добавлении файлов они суммировались, но это более трудоёмко и не всем может подходить. Дмитрий Спасибо за быстрый ответ, разобрался.
Но появилась новая проблема: выходит сообщение «Извините, данные не были переданы» и все формы остаются заполненными , хотя на самом деле на почту все приходит моментально. Дмитрий Пока вопрос снимается. Не знаю причину сбоя. Заново отписал код, загрузил на сайт — вроде опять работает. Анонимный Господа, поставил форму по второму варианту. На самом сайте перед формой выходит alert(«Ваше сообщение получено, спасибо!»);’; > ?> . В чем дело? NMitra Ставьте по первому, у вас PHP не поддерживается на HTML страницах Unknown Когда сообщение отправлено или не отправлено. Вместо русских букв Появляются знаки вопроса. Как это можно исправить?
Если вместо русс. букв написать англ — тогда выводит нормально англ. буквы. Анонимный Повторю вопрос:
Когда сообщение отправлено или не отправлено. Вместо русских букв Появляются знаки вопроса. Как это можно исправить?
Если вместо русс. букв написать англ — тогда выводит нормально англ. буквы. NMitra У вас кодировка utf-8?

PROG-TIME

Простая форма обратной связи на PHP. Отправка данных из формы на почту

Сегодня я вам покажу самую простую форму обратной связи на HTML и PHP. Весь код, с описанием, представлен в записи. Для создания формы вам понадобятся базовые знания HTML и PHP.

Для того чтобы ваша форма работала, необходимо:

  1. Писать код в php файле (название.php)
  2. Наличие локального сервера Open Server, Denwer. Или можно загрузить файл на хостинг.

Здесь стандартный базовый шаблон.
В body, мы пишем вывод сообщений и форму, которая будет состоять из нескольких полей, в нашем случае это email, имя и сообщение. Для каждого поля нужно задать уникальный атрибут name.

В атрибут value, мы пишем , этот скрипт, сохраняет введённые данные, после обновления страницы. В теге textarea нет значение value, поэтому мы пишем этот скрипт в сам тег.

Теперь перейдём в PHP:

У нас есть 2 варианта добавления скрипта, либо в отдельный файл, либо в файл с формой. Если добавить файл в отдельный файл, то в форме необходимо изменить атрибут action и записать в него путь к файлу со скриптом. Если добавлять скрипт в файл с формой, то скрипт необходимо заключить внутри тега , а сам код разместить до HTML.

Скрип читается так…

В переменной $msg_box будут выводится все сообщения работы формы.

Если кнопка btn_submit нажата, то создается массив errors в который мы будем записывать ошибки.

Теперь проверим форму на заполненность полей, если какое либо поле не заполнено, то мы выводим соответствующие ошибки.

Далее если массив ошибок пуст, то мы запускаем обработчик. В переменную message мы записываем данные которые будут отправлять вам на почту.

После этого мы записываем функцию отправки формы send_mail($message). Функцию я записал чуть ниже. Отправляется сообщение и выводится текст об успешной отправке.

Функция обработки выглядит, следующим образом…

В переменную mail_to мы записываем адрес почты на которую будет отправляться письмо.

В переменную subject записывается название письма.

Далее идут правила обработки формы. Здесь же мы пишем от кого письмо и вводим адрес почты.

И в конце мы отправляем форму через функцию mail.

На этом все. Вот так выглядит полный код формы обратной связи.

Html формы с полем отправки файла на Email


Html формы с полем отправки файла представлен ниже. При клике по кнопке »

» пользователь получает возможность выбрать файл на своей локальной машине.

Форма будет выглядеть следующим образом:

Обратите внимание, что в атрибутах формы мы указали

. Это скажет браузеру, что форма может быть использована для отправки файлов. Также мы добавили поля »

» с целью собрать как можно больше информации о пользователе. Затем идет поле отправки файла.

При клике по кнопке

, данные, включая данные о посылаемом файле, отправятся в файл-обработчик, путь к которому мы указали в атрибуте формы

Получаем информацию о загруженном файле

Сперва мы проверим полученные данные, затем, в случае успешной проверки, отправим данные на электронную почту.

Всю информацию о загруженных файлах можно получить при помощи массива

для нашего примера приведено ниже. Обратите внимание, что значение атрибута

(у нас оно равно

) в поле выбора файла может быть любым.

Оригинальное имя файла на компьютере пользователя.

Mime-тип файла, в случае, если браузер предоставил такую информацию. Пример: «image/gif». Этот mime-тип не проверяется в PHP, так что не полагайтесь на его значение без проверки.

Размер в байтах принятого файла.

Временное имя, с которым принятый файл был сохранен на сервере.

Код ошибки, которая может возникнуть при загрузке файла. Этот элемент был добавлен в PHP 4.2.0

Получаем имя, тип и размер загруженного файла:

Как видите, информация о загруженном файле доступна через массив

Проверяем размер и тип расширения загруженного файла

Предположим, что получаемый файл должен быть изображением (»

«) и не должен превышать 100 Kb. Тогда наш код будет выглядеть так:

В вышеприведенном коде мы проверяем размер и тип файла. Максимально допустимый размер файла равен 100 KB (

содержит названия всех допустимых расширений файла. Таким образом, расширение файла проходит проверку на соответствие значениям массива

. При обнаружении ошибок переменной

присваивается соответствующая запись.

Копируем загруженный файл

Пришло время отправить загруженный файл на почту администратора.

Сперва мы должны скопировать файл в папку на сервере. (По окончанию работы скрипта, в случае, если принятый файл не был переименован или скопирован в новую папку, он будет автоматически удален из временной папки.)

Копируем загруженный файл в папку ‘

‘. Если вы хотите переименовать папку (

Убедитесь, что папка ‘

‘ имеет права доступа 777. Файл сохранен на вашем сервере, и вы можете обратиться к нему в любой момент.

Отправляем письмо

Составим и отправим письмо на электронную почту администратора сайта (или кому хотите). Для отправки и компоновки письма будем использовать pear library (инструкцию по установке смотрите ниже). Pear классы

используются для отправки электронной почты с прикрепленными файлами.

Для начала мы должны подключить файлы pear library для этих классов:

Ниже приведен код компоновки и отправки письма:

поможет в создании MIME послания. В приведенном выше коде мы создали объект

, обновили тело письма (

) и добавили прикрепленный файл (

Прежде чем использовать классы PEAR необходимо установить PEAR на вашем сервере. Вот быстрый способ установить PEAR:
Скачайте инсталлятор PEAR

Отправка вложений в письме PHP

Пишу скрипт отправки почты с вложением.

Каким образом можно добавить второе вложение из input type = «file» на форме?

3 ответа 3

Три простых шага для решения данной проблемы:

  1. Посмотреть на календарь и уточнить, какой сейчас век на дворе.
  2. Аккуратно выделить этот код, и нажать клавишу Del
  3. Скачать phpmailer
  4. Забыть все эти кустарные ковыряния как страшный сон.

В итоге код должен получиться примерно таким:

следует понимать, что отправка почты — это не просто копирование в свой скрипт каких-то определенных сочетаний символов, к оторые случайно сработали в прошлом веке у автора какой-либо допотопной статьи. Это гораздо более сложный процесс, который включает множество нюансов. И поэтому отправку почты надо не лепить вручную из подручных средств на ходу, а доверить проверенному и отлаженному решению.

Простейшая форма отправки данных на почту при помощи HTML и PHP

Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки HTML и языка программирования PHP.

Язык разметки HTML сам по себе несложен, нужно всего лишь разобраться в том как и где ставить те или иные теги. С языком программирования PHP все немного сложнее.

Для программиста создать такую форму не составит труда, а вот HTML верстальщику может показаться сложным некоторые действия.

Создаем форму отправки данных в html

На этом этапе нужно создать файл form.php, в него добавить html код формы. Подробности о каждом элементе формы читайте в статье Как сделать форму в HTML для сайта.

Первая строка будет следующей

Теперь соберем все вместе.

Теперь сделаем так, чтобы поля в форме стали обязательными для заполнения. Имеем следующий код:

Создаем файл, принимающий данные из HTML формы

Это будет файл с именем send.php

В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:

$fio = $_POST[‘fio’];
$email = $_POST[’email’];

Перед названиями переменных в php ставится знак $, в конце каждой строки ставиться точка с запятой. $_POST это массив в который передаются данный из формы. В форме html при этом указан метод отправки method=»post». Так, приняты две переменные из формы html. Для целей защиты своего сайта нужно провести эти переменные через несколько фильтров — функций php.

Первая функция преобразует все символы, которые пользователь попытается добавить в форму:

$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);

При этом новые переменные в php не создаются, а используются уже имеющиеся. Что сделает фильтр, он преобразует символ » $fio = urldecode($fio);
$email = urldecode($email);

Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:

$fio = trim($fio);
$email = trim($email);

Существуют и другие функции, позволяющие отфильтровать переменные php. Их использование зависит от того , насколько вы опасаетесь того, что злоумышленник попытается добавить программный код в данную форму отправки данных на почту html.

Проверка данных, передаваемых от HTML формы в файл PHP

Для того, чтобы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:

Вторая строка здесь нужна для того, чтобы разделить вывод переменных php на разные строки.

Отправляем полученные данные из формы HTML на почту при помощи PHP

Для отправки данных на почту нужно воспользоваться функцией mail в PHP.

mail(«на какой адрес отправить», «тема письма», «Сообщение (тело письма)»,»From: с какого email отправляется письмо \r\n»);

Например, нужно отправить данные на email владельца сайта или менеджера [email protected]

Тема письма должна быть понятной, а сообщение письма должно содержать то, что указал пользователь в HTML форме.

mail(«[email protected]», «Заявка с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: [email protected] \r\n»);

Необходимо добавить условие, которе проверит отправилась ли форма при помощи PHP на указанные адрес электронной почты.

if (mail(«[email protected]», «Заказ с сайта», «ФИО:».$fio.». E-mail: «.$email ,»From: [email protected] \r\n»))
<
echo «сообщение успешно отправлено»;
> else <
echo «при отправке сообщения возникли ошибки»;
>

Таким образом программный код файла send.php, который отправит данные HTML формы на почту будет выглядеть следующим образом:

Три строки для проверки, передаются ли данные в файл закомментированы. При необходимости их можно удалить, так как они нужны были только для отладки.

Помещаем HTML и PHP код отправки формы в один файл


В комментариях к этой статье многие задают вопрос о том, как сделать, чтобы и HTML форма и PHP код отправки данных на почту находились в одном файле, а не двух.

Информационный центр

Отправка файлов через форму

Перед начинающим программистом на PHP часто встает задача передать на сервер файл через форму. На сервере принятый файл обрабатывется, либо переносится в определенную папку, либо отправляется электронной почтой адресату, либо разбирается, и так далее и тому подобное.

В этой статье рассмотрим ситуацию с отправкой файла электронной почтой стандартной функцией mail().

Создадим простую форму.

И сразу небольшие пояснения. Если вы хотите отправить файл, то в форме необходимо установить аттрибут enctype в значение «multipart/form-data», в противном случае файлы отправляться не будут. Этот атрибут определяет метод кодирования данных и по умолчанию установлен в «application/x-www-form-urlencoded».

В нашем случае, отправка данных формы происходит методом post (что указано в форме: method=»post») с помощью тегов input разных типов. Тег input типа file — отправляет файл.

Тег input наверное самый распространенный тег формы, имеющий несколько типов. В нашей форме присутствует еще и тег input типа text, который принимает и передает текстовое значение. Кнопка «Отправить», это тоже тег input типа submit.

Конструкция , говорит о том, что в качестве обработчика формы выступает сам этот файл. Это же может быть записано еще и таким способом . В любом случае $php_self и $SERVER[‘PHP_SELF’] — суперглобальные переменные, ввод которых необходимо проверять. Поэтому рекомендую использовать несколько измененную конструкцию , в которой ввод php_self проходит через функцию htmlspecialchars ().

Вернемся к форме. Как отправить файл через форму мы уже знаем, теперь посмотрим как файл принять и обработать на стороне сервера.

Текстовые значения формы тегов input типа text, password, hidden, radio, а также тегов textarea и select принимаются на сервере через суперглобальные массивы $_POST или $_GET (в зависимости от указаний содержащихся в форме) выражением типа

$username = htmlspecialchars(stripslashes($_POST[‘username’]), ENT_QUOTES).

В этом выражении присутствуют фунции php htmlspecialchars и stripslashes. Первая преобразует специальные символы в HTML сущности. Например, ‘&’ (амперсанд) преобразуется в ‘&’, ‘ Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. «. Тема и тело письма — обычные текстовые данные, причем тема в виде простого текста, а тело письма может быть в виде текста html

Вам отправлен файл

Подготовим заголовки для письма.

Если бы нам не нужно было отправлять файл вложением к письму, то заголовки могли бы выглядеть так:

$header = «From: [email protected]».$_SERVER[‘HTTP_HOST’].»\r\nContent-Type: text/html; charset=’windows-1251’\r\nContent-Transfer-Encoding: 8bit\r\n»;

Здесь указываем от кого письмо (From: ), тип текста письма и его кодировка (Content-Type: text/html; charset=’windows-1251′) и количество бит для кодирования символов (Content-Transfer-Encoding: 8bit). Для кириллических кодировок (koi8-r, koi8-u, windows-1251, iso-8859-5, cp866) указание количества бит является крайне желательным, если вы не хотите получать знаки вопроса вместо текста. Код \r\n служит обозначение кодов «возврата каретки» и «переноса строки» (так обозначается конец строки в windows)

Хотите знать больше? Нажмите «Нравится»

Если письмо имеет вложение в виде файла, то подготовка заголовка усложняется, меняется и тело письма. Нам надо прочитать файл в переменную, преобразовать ее и подать в преобразованном виде с соблюдением разметки. Это будет выглядеть так:

$f = fopen($file_name_new_full,»rb»); // Открываем и читаем бинарно файл
$un = strtoupper(uniqid(time()));
$body = «————«.$un.»\r\nContent-Type: text/html; charset=’koi8-r’\r\nContent-Transfer-Encoding: 8bit\r\n\r\n». // Отбивается пустая строка .
«

Вам отправлен файл

«.
«\r\n————«.$un.»\r\nContent-Type: application/octet-stream;name=\»$file_name_new\»\r\nContent-Transfer-Encoding:base64\r\nContent-Disposition:attachment;filename=».$file_name_new.»\r\n\r\n».chunk_split(base64_encode(fread($f,filesize($file_name_new_full)))).»\r\n»;
$headers = «From: «.$from.»\r\nReply-To: «.$from.»\r\nMIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\»———-«.$un.»\»\r\n»;

Осталось только отправить письма и удалить принятый файл.

$sucess = mail(» Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. «, $subject, $body, $headers);
unlink ($file_name_new_full);

Функция mail() возвращает логическое значение true или false в зависимости от результата отправки письма.

Если Вам помогла эта статья, можете выразить свою благодарность поставив на нее ссылку.

Как сделать форму загрузки файла на сайте

Дата публикации: 2020-09-15

От автора: приветствую вас друзья. Из этой небольшой статьи вы узнаете, как сделать форму загрузки файла на сайте. Это позволит прикреплять картинки и прочие файлы к форме и отправлять файлы на сервер, где они уже будут обработаны. Начнем.

Исходные файлы текущей статьи вы можете скачать по ссылке.

Начнем с создания формы, в которой будет присутствовать поле для загрузки файла. На что здесь стоит обратить внимание? Во-первых, поле для отправки файла должно иметь специальный тип – type=»file». Во-вторых, файл может быть отправлен только в теле запроса, поэтому метод GET для отправки формы не подойдет, нужно использовать только метод POST — method=»post». Ну и, в-третьих, для формы необходим специальный атрибут enctype с определенным значением — enctype=»multipart/form-data». Без этого атрибута файл просто не будет отправлен.

Исходя из озвученного выше, наш код будет примерно таким:

Практический курс по верстке адаптивного сайта с нуля!

Изучите курс и узнайте, как верстать современные сайты на HTML5 и CSS3

Мнение подобно костям —
у каждого свои

Форма отправки данных на почту с сайта html и php

  • размер шрифта уменьшить размер шрифтаувеличить размер шрифта
  • Печать
  • Эл. почта

Форма обратной связи или форма отправки заявки очень важна для сайта. Полностью рабочий код отправки данных на почту с сайта

В Интернете очень много подобных форм, но, мягко говоря, не все они рабочие. Трудно найти рабочий код отправки данных с сайта. Я нашел и немного его улучшил. Это только код! Стили Вам нужно будет подключить свои — это очень просто!

Первым делом Вам нужно создать пустой файл с именем send.php и не забывайте о кодировке, которую Вы используете. Удобнее всего использовать Notepad++ для работы с кодом.

В пустой файл send.php вставляете следующий код:

if(isset($_POST[‘submit’])) <
$to = » Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. ;; // Здесь нужно написать e-mail, куда будут приходить письма
$from = $_POST[’email’]; // this is the sender’s Email address
$first_name = $_POST[‘first_name’];
$subject = «Форма отправки сообщений с сайта»;
$subject2 = «Copy of your form submission»;
$message = $first_name . » оставил сообщение:» . «\n\n» . $_POST[‘message’];
$message2 = «Here is a copy of your message » . $first_name . «\n\n» . $_POST[‘message’];

$headers = «From:» . $from;
$headers2 = «From:» . $to;

mail($to,$subject,$message,$headers);
// mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender — Отключено!
echo «Сообщение отправлено. Спасибо Вам » . $first_name . «, мы скоро свяжемся с Вами.»;
echo «

Отлично! Пол дела сделано!

Теперь Вам нужно ставить html код на свой сайт, чтобы форма обратной связи появилась. Вот этот код:

Как видите, форма подключается к файлу send.php. По умолчанию файл send.php нужно поместить в корень Вашего сайта или прописать к нему другой путь.

Эта форма отправки данных полностью рабочая и проверена. В противном случае, нужно смотреть настройки хостинга.

Исходники формы отправки данных на почту с сайта html и php по этой прямой ссылке. Скачивайте и пользуйтесь на здоровье. Не забудьте изменить данные на свои!

Внимание!

У кого есть проблема с кодировкой (приходят кракозябры) в KOI8-R в почтовом клиенте Outlook, смотрите новую версию формы отправки писем на почту с решенной проблемой с кодировкой! Ну и вообще, новая версия более улучшенная!

Всем удачи и добра!

Макс Пуля

Приветствую! Присоединяйтесь к сообществу Epic Blog и выражайте свои мысли.

Последнее от Макс Пуля

Похожие материалы (по тегу)

20 комментарии

  • Комментировать Пятница, 12 Октябрь 2020 09:04 написал Макс Пуля

Советую использовать Новую форму отправки https://epicblog.net/19-web-development/novaya-forma-otpravki-dannykh-na-pochtu-s-sajta-s-v-outlook-html-i-php.html
В новой форме, чтобы добавить новое поле, в файле mail.php вот сюда:
/* Указываем переменные, в которые будет записываться информация с формы */
$first_name = $_POST[‘first_name’];
$email = $_POST[’email’];
$phone = $_POST[‘phone’];
$message = $_POST[‘message’];
$subject = «Форма отправки сообщений с сайта Epic Blog»;

Добавляете новую переменную из html, например address (адрес), получится так:

/* Указываем переменные, в которые будет записываться информация с формы */
$first_name = $_POST[‘first_name’];
$email = $_POST[’email’];
$phone = $_POST[‘phone’];
$address = $_POST[‘address’];
$message = $_POST[‘message’];
$subject = «Форма отправки сообщений с сайта Epic Blog»;

Затем, эту переменную добавляете сюда:
/* Переменная, которая будет отправлена на почту со значениями, вводимых в поля */
$mail_to_myemail = «Здравствуйте!
Было отправлено сообщение с сайта!
Имя отправителя: $first_name
E-mail: $email
Номер телефона: $phone
Текст сообщения: $message

Получится следующее:
/* Переменная, которая будет отправлена на почту со значениями, вводимых в поля */
$mail_to_myemail = «Здравствуйте!
Было отправлено сообщение с сайта!
Имя отправителя: $first_name
E-mail: $email
Номер телефона: $phone
Адрес отправителя: $address
Текст сообщения: $message

Ну и, конечно, нужно не забыть добавить в html код:

Ваш адрес: input type=»text» name=»address»

Если я добавлю новые поля в форму ХТМЛ, как их правильно прописать в PHP

Здравствуйте, использую вашу форму, решил добавить IP адрес пользователя который вызвал обратную связь, в письмо. Нашел код IP-адрес:$REMOTE_ADDR , куда его вставлять?

Как сделать так, чтобы после отправки формы остаться на той же странице ?

Не отправляет! какой адрес указывать в $from = ? И шрифт неправильный в сообщении отправлено.

Дорогие читатели! Специально для тех, у кого не приходят письма на почту — свежий архив с изменениями в строке $from — можно скачать по ссылке https://epicblog.net/download/form_new.zip
Только что проверил, письма приходят! Пробуйте! Если нет — обращайтесь к своему хостеру с претензией =)

Не идут сообщения, уважаемый автор. Пробовал почты и яндекс и gmail. Пишет, что сообщение отправлено, что всем спасибо, однако, сообщения не идут

Веб-дизайн и поисковая оптимизация

Создание формы обратной связи

• Создание формы обратной связи на сайте
• Проверка ввода формы обратной связи
• Простая форма обратной связи с проверкой введенных данных
• Создание анкеты на сайте
• Проверка формы обратной связи «на лету»
• Отправка файлов через форму обратной связи
• Капча в форме обратной связи
• Простая капча для формы обратной связи
• Заказ товаров и услуг через форму обратной связи
• Форма обратной связи — отправка писем на разные адреса
• Проблемы с кодировкой в форме обратной связи
• Создание кнопок в форме обратной связи
• Календарь в форме обратной связи
• Оформление формы обратной связи
>> смотреть все статьи о создании формы обратной связи

Отправка файлов через форму обратной связи

В предыдущих статьях были рассмотрены различные варианты формы обратной связи и проверка её заполнения посетителем сайта. Довольно часто, кроме простого сообщения от посетителя сайта, требуется переслать автору фотографию, документ, резюме и т.п. Форма обратной связи позволяет легко реализовать отправку любого файла с компьютера пользователя на ваш e-mail. Иногда можно встретить формулировку «Отправка аттача с сайта» от англ. Attach (Прикреплять).

Несмотря на удобство этой функции, следует иметь в виду, что благодарные посетители сайта могут прислать в прикрепленном файле не только фото любимой собачки, кошечки или свежекупленного автомобиля, но и всякую вирусную гадость или видео такого размера, что ваш почтовый ящик переполнится и «закроется на учет». Так сказать, «получи, фашист, гранату!».

Существует множество скриптов отправки файлов с сайта, в том числе и с проверкой отсылаемого содержимого. Найти подходящий не трудно, всё зависит от ваших задач и терпения в поиске по интернету.

В любом случае, начинаем с добавления в созданную нами форму обратной связи (см. статью «Создание формы обратной связи на сайте») строчку кода , которая как раз и отвечает за формирование строчки с кнопкой Обзор. При нажатии на неё открывается стандартное окно Windows для выбора файла. Кроме того, обязательно надо добавить в начале формы атрибут enctype=»multipart/form-data» тега

Как всегда, код этой формы вполне работоспособен и его можно (нужно) посмотреть и скопировать в браузере.

Далее необходимо подкорректировать РНР-страничку отправки сообщения из формы обратной связи с вложенным файлом на ваш электронный адрес. Как говорилось выше, вариантов обработки формы великое множество и изобретать велосипед нет никакой необходимости.

Оптимально, на мой взгляд, использовать готовый РНР-скрипт солидной фирмы, например, Worx International Inc. Одна из её разработок — популярный класс для работы с почтовым сервером class.phpmailer.php, который позволяет реализовать множество полезных функций, не занимаясь написанием собственных РНР-скриптов. Скачать эту прелесть можно бесплатно с сайта фирмы-разработчика. Так как сайт англоязычный и у некоторых читателей могут возникнуть трудности с загрузкой, я разместил его здесь. Скачиваете файл (размер 10 Кб), разархивируете и размещаете class.phpmailer.php на своем сайте в той же директории, где и страничка с формой обратной связи. Если вы хотите более подробно познакомиться с данной программой, рекомендую заглянуть на сайт www.php-mail.ru, особенно в гостевую книгу, а также на сайт От новичка до профессионала.

Теперь нам осталось только немного изменить РНР-страничку, отвечающую за отправку почты с вложенным файлом, добавив в неё class.phpmailer.php командой include «class.phpmailer.php»; и несколько строк для обработки пересылаемого файла.

Полный рабочий код страницы mail.php для отправки с сайта сообщений с прикрепленным файлом приведен ниже:

From = $_REQUEST[’email’];
$mail->FromName = $_REQUEST[‘name’];
$mail->AddAddress(‘ [email protected] ‘);
$mail->IsHTML(true);
$mail->Subject = $_POST[‘title’];

if(isset($_FILES[‘files’]))
<
if($_FILES[‘files’][‘error’] == 0)
<
$mail->AddAttachment($_FILES[‘files’][‘tmp_name’],$_FILES[‘files’][‘name’]);
>
>
$mail->Body = $message;
if (!$mail->Send()) die (‘Mailer Error: ‘.$mail->ErrorInfo);
<
echo ‘ Спасибо за отправку вашего сообщения
Нажмите, чтобы вернуться на главную страницу’;
>
if (!empty($_POST[‘submit’])) send_mail();
?>

Тема: Отправка файла на мыло через форму

Опции темы
Отображение
  • Линейный вид
  • Комбинированный вид
  • Древовидный вид

Отправка файла на мыло через форму

Привожу пример полностью рабочей формы, сам проверил, которая отправляет текст и фотку на почтовый ящик. Так же нужно выгрузить файл class.phpmailer.php в тоже место (файл прикрепил, см. в конце)

Правда есть пару косяков, а именно: кодировка не пойми какая из-за чего на почту приходят краказябры; изображение не переносится на следующую строчку, что портит вид письма (см. картинку ниже). Может кто нибудь знает как исправить?

UPD. Кодировка налажена, файл обнавлён.

Последний раз редактировалось anikitos; 08.08.2010 в 19:23 .

кодировку ищите в .php файле класса. Была такая проблема решил таким способом. По поводу изображения так в примерах к данному классу есть примеры с картинками

Топ-пост этого месяца:  Интересные темы WordPress на конец 2020 года
Добавить комментарий