1. Главная страница » Компьютеры » Php mail прикрепить файл

Php mail прикрепить файл

Автор: | 16.12.2019

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

Я написал скрипт, который Вы смело можете копировать и использовать в своих скриптах. Данный код позволяет отправлять файлы по e-mail через PHP:

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

Данный PHP-скрипт для отправки файлов по e-mail сделан максимально коротким, он универсален, поэтому Вы можете его дорабатывать под свои нужды так, как пожелаете.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

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

Порекомендуйте эту статью друзьям:

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

Она выглядит вот так:

  • BB-код ссылки для форумов (например, можете поставить её в подписи):
  • Комментарии ( 19 ):

    Михайл Русаков ;). Со светлым Рождеством Христовым! Я тебя очень прошу каждые исходники и добавить и покажи "Результат данного примера показан" например как у htmlbook.ru Я тебя предлагаю мое мнение это удобно видеть примеры и все будет понял. Заранее спасибо большое ;). Удачи.

    У вас ошибочка! Написано "Данная код" Вы наверное имели ввиду "Данный код"

    Михаил здравствуйте, я хочу спросить, как можно отправлять несколько файлов. Очень надо. Заранее спасибо!

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

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

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

    Вот форма и скрипт, они должны быть в разных файлах, в action нужно вставить имя файла со скриптом, если он будет не в одной директории с формой то прописать полный путь. Форма: А это немного переделанный скрипт, так как форма уже была и я подогнал по неё скрипт и дописал вывод сообщения при отправке или ошибке.

    А если нужно присоединить сообщение к оправке данных с полей формы, но только после действия (нажатия определённой кнопки) на другой странице сайта? И только после присоединения сообщения отправить. Как это прописать в скрипте? Я в программировании совсем ничего не понимаю.

    Михаил, спасибо за скрипт. Давно уже мучает такой вопрос, и не только меня наверное. Почему с сайта письма попадают в спам на gmail или бывает совсем не приходят? На все остальные почтовые сервисы письма приходят нормально.

    И ещё проблема. Ваш скрипт хорошо работает, но текст присылается со знаками вопросами ))) в ромбиках чёрных Что посоветуете?

    Как именно? Кодировка UTF-8 стоит, сам файл тоже в ней.

    Здравствуйте, Не могу понять где универсальность скрипта. Почему прописано имя файла "form.txt" и соответственно на почту приходит файл с этим именем. Как сохранить оригинальное имя файла (то что было на момент отправики)? Вопрос 2: почему приходит файл нулевого размера?

    Здравствуйте Михаил! Подскажите пожалуйста как прописать, что бы отправка имела такой вот вид http://rghost.ru/7bRSxGzVb/image.png При выборе отправляло данный файл! Спасибо!

    Добрій вечер. Мучает один вопрос. Почему когда приходит сообщение на єлектронную почту, то оно отображается как файл "noname.txt"? Как можно сделать, чтобы отображалось как текст или как изменить "noname" на другое назнавание? Спасибо

    Ищу как мне сделать скрипт на товарный одностраничник с апселлом. У вас самое толковое объяснение, как отправлять сообщения на почту. Но мне нужно: 1. Отправляем на ЛОГИН@yandex.ru 2. Считываем данные с полей формы Имя и Телефон 3. При нажатии кнопки "Отправить" на форме, перебрасывает на дополнительную страничку upsell.php. НО ПРИ ЭТОМ ДАННЫЕ С ПОЛЕЙ ФОРМЫ НЕ ОТПРАВЛЯЮТСЯ НА Е-МЭЙЛ, А СОХРАНЯЮТСЯ-ОЖИДАЮТ КОМАНДЫ ОТПРАВКИ. 4. На странице с апселлом есть 2 кнопки (нет никакой формы): а) если покупатель жмёт кнопку "Добавить в посылку", то вступает в дело функция отправки сообщения mail с собранными данными с полей формы и добавляется название дополнительного товара. Это всё выражается в конечном итоге в виде сообщения на е-мэйл Имя: Телефон: Название дополнительного товара. б) если покупатель жмёт кнопку "Отказаться", то вступает в дело функция отправки сообщения mail с собранными данными с полей формы, но уже без добавления дополнительного товара. Это всё выражается в конечном итоге в виде сообщения на е-мэйл Имя: Телефон:

    Здравствуйте,Михаил.Не могли бы Вы подсказать как можно организовать следующее.Мне нужно что бы человек,на моем сайте,выбрав нужный видеофайл смог бы сразу послать его на указанный им E-mail без скачивания файла на свой компютер.Файлы не большого размера 2-6мб.Буду рад любым подсказкам.

    Код содержит множество ошибок: Неправильный перенос строки, неверный разделитель, отсутствие кодирования письма. http://prntscr.com/jgwp7m

    Для добавления комментариев надо войти в систему.
    Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.

    Copyright © 2010-2019 Русаков Михаил Юрьевич. Все права защищены.

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

    Прежде, чем "прикреплять" к письму файл, вы должны загрузить его на хостинг и знать его путь, пусть это будет: _buhuchet_pinkbook.xls, который будет находиться в корне вашего сайта. Там же и создадим файл mail.php в кодировке UTF-8 без BOM и пропишем html код формы:

    Читайте также:  Amazfit bip global kokoda green

    Думаю, все понимают, код формы, единственное, обратите внимание на атрибут ENCTYPE="multipart/form-data" — он необходим для работы с файлами. action у нас пустой, так как этот же файл и будет обрабатывать POST запрос.

    Теперь в самое начало этого файла добавим php код:

    //формирует файл для отправки
    $body = "————".$un."
    Content-Type:text/html; charset=$charset
    ";
    $body .= "Content-Transfer-Encoding: 8bit

    ".$msg."

    "; //добавляет текст сообщения
    $adrfile = ‘_buhuchet_pinkbook.xls’;
    $namefile = ‘_buhuchet_pinkbook.xls’;
    //если файл $adrfile загружен, то прикрепляем его к письму
    if (file_exists($adrfile)) <
    $body .= "————".$un."
    ";
    $body .= "Content-Type: ".pathinfo($adrfile, PATHINFO_EXTENSION).";";
    $body .= "name="".$namefile.""
    ";
    $body .= "Content-Transfer-Encoding:base64
    ";
    $body .= "Content-Disposition:attachment;";
    $body .= "filename="".$namefile.""

    ";
    $body .= chunk_split(base64_encode(file_get_contents($adrfile)))."
    ";
    >

    mail( $to, $subject, $body, $head );
    print "";
    >
    ?>

    Код не такой и маленький, но не сложный для понимания.

    Первая часть кода отвечает за получение данных с формы, инициализации параметров: кому отправить сообщение ($to), формирование заголовков ($head), текста сообщения ($msg) и установку кодировки utf8.

    Вторая часть кода готовит файл для отправки. Здесь имеют значение 2 переменные:

    $adrfile — полный путь к прикрепляемому файлу в письме
    $namefile — имя файла, которое будет отображаться в письме

    И последняя часть кода просто отправляет письмо с файлом, если он прикреплен к письму. JavaScript позволит перезагрузить страницу, чтобы пользователь при нажатии F5 или обновлении страницы не отправлял форму снова (и не вылазило окно с вопросом — повторно отправить форму).

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

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

    • Форма обратной связи 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 Поэтому подсказывайте, что выдает у вас, если сделать так:

    Читайте также:  Amd ruzen 5 2400g

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

    $message = "Имя: ".$_POST[‘nameFF’]."
    Email: ".$from."
    Сообщение: ".$_POST[‘messageFF’];

    $message = "Имя: ".$_POST[‘nameFF’]."
    Email: ".$from."
    Сообщение: ".$_POST[‘messageFF’]."
    IP: ".$_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 n.mitra@yandex.ru Анонимный Приходят знаки вопросов вместо имени. Где то надо указать кодировку? 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 Доброе утро!
    Попробуйте удалить заголовки:

    Читайте также:  Candy не набирает воду

    $headers .= "From: " . $from . "
    ";
    $headers .= "Reply-To: " . $from . "
    ";

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

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

    $headers = "MIME-Version: 1.0
    ";
    $headers .= "Content-Type: multipart/mixed; boundary="$boundary"
    ";

    Возможно, еще в где-то проблема может быть? 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?

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *