Как прикрепить файл к письму php
Вменяемая инструкция к PHPMailer “Отправка писем и файлов на почту”
Apr 23, 2019 · 4 min read
PHPMailer обновился и инструкция к прошлой версии не актуальна, хотя вы также можете использовать прикреплённые файлы в той инструкции. Работать будет.
Прошло несколько лет, но у вас всё также нет выхода, и PHPMAILER — это самый простой способ отправлять со своего сайта письма на почту.
О чем эта инструкция.
Это инструкция по добавлению на ваш сайт PHPMailer и отправки писем с прикреплёнными файлами к вам на почту без перезагрузки страницы.
1. Скачиваем PHPMailer
Переходим на сайт https://github.com/PHPMailer/PHPMailer и скачиваем последнюю версию
Во всём архиве нам нужны только 3 файла:
Всё остальн о е, что хранится на Github — на*уй не нужно, можете удалять.
2. Удаляем из файлов весь хлам
Этот пункт вы можете пропустить. Он не является обязательным
Файлы, написанные разработчиками PHPMailer, содержат немереное количество мусора, состоящего из одних комментариев (зачем?!). Вес этих трёх файлов вместе с комментариями равен 196кб, после удаления комментов вес составит 72кб. Почти в 3 раза…
Я предлагаю удалить все комментарии в файлах с помощью какого-нибудь “PHP минификатора”. Можете использовать любой, я взял (первый попавшийся) http://php-minify.com
Процедуру повторяете со всеми тремя файлами.
Для наглядности файл Exception.php
3. Перемещаем файлы в проект
И теперь помещаем эти 3 файла в наш проект. Я создал специально для этих файлов папку под названием phpmailer
4. Создаём файл конфигурации
Создадим файл send.php с таким содержанием
Здесь вам нужно отредактировать эти поля под себя:
Нужно использовать не пароль от самой почты, а “Пароль приложения”. В настройках вашей почты, будь то Gmail, Yandex или Mailru— есть раздел “Пароли приложений”, где вы можете специально создать отдельный сгенерированный пароль для PHPMailer.
Сохраняем этот файл send.php и помещаем его в корень сайта
В примере указаны настройки для Яндекса. Вы можете использовать любую почту для отправки. Для изменения почты отправки, к примеру, на Gmail — нужно изменить эти поля:
$mail->Host = ‘smtp.gmail.com’; // SMTP сервер
$mail->SMTPSecure = ‘ssl’; // шифрование
$mail->Port = 465; // Порт
5. Создаём HTML форму
Теперь поместим эту форму в нужное место на вашем сайте
Обратите внимание на onsubmit. Там вторым аргументом должно быть указано имя файла, то есть send.php.
6. Прописываем JavaScript
Отправка писем при помощи PHP-Прикрепление файла
Письмо, содержащее прикрепленный файл, несколько отличается от простого.
В нем добавляются некоторые заголовки, и немного меняется само построение,
хотя несомненно само письмо остается текстовым файлом. Но давайте все по порядку.
Одна из особенностей — наличие заголовка mime-version.
Этот заголовок указывает стандарт, которому соответствует тело сообщения.
Сообщения, соответствующие mime обязаны содержать такое поле заголовка со следующим текстом:
mime-version: 1.0
Если мы хотим отослать письмо с прикрепленными файлами, то необходимо использовать заголовок content-type: multipart/mixed, который обозначает, что письмо состоит из нескольких частей, каждая из которых содержит свой заголовок content-type. Для обозначения границы этих частей необходимо использовать параметр boundary, который еще называется маркером границы.
Значением этого параметра может служить любая строка. Но надо учесть, что она должна быть уникальной и не встречалась в теле письма. Иначе письмо может быть неправильно разбито на части.
from: «uspenskii evgeny»
to: user@domain.ru
subject: hello
mime-version: 1.0
content-type: multipart/mixed; boundary=»spravkaweb-12345″
При разделении письма на части перед маркером должны стоять два знака дефиса.
А последний маркер, который обозначает конец письма, должен содержать в конце два знака дефиса.
Для каждой части необходимо установить свои заголовки.
После заголовков необходимо поставить два знака перевода строки.
from: «uspenskii evgeny»
to: user@domain.ru
subject: hello
mime-version: 1.0
content-type: multipart/mixed; boundary=»spravkaweb-12345″
—spravkaweb-1234
content-type: text/plain; charset=»windows-1251″
content-transfer-encoding: quoted-printable
hi!
here’s that my file!
—spravkaweb-1234
content-type: application/x-rar-compressed; name=»file.rar»
content-transfer-encoding:base64
content-disposition:attachment
Если у нас идет часть с текстом, то надо заголовок content-transfer-encoding присвоить значение quoted-printable, либо 7bit, либо 8bit. Для части с файлом этот заголовок должен быть равен base64.
Заголовок content-disposition, присутствующий во второй части, указывает, как почтовой программе следует отобразить данную часть письма. Он может принимать значение attachment (этот участок не является частью письма, а просто прикреплен к нему в виде файла) и inline (включение, которое используется непосредственно в письме, например, картинка, вставляемая в html).
В первой части заголовком
content-type: text/plain; charset=»windows-1251″
указали, что это простой текст с кодировкой windows.
Во второй же части заголовком
content-type: application/x-rar-compressed; name=»file.rar»
указали, что тип файла — rar-архив, а имя файла — file.rar.
Если отправляем gif-картинку, его content-type будет выглядеть:
content-type: image/gif; name=»file.gif»
В случае, если заранее не известно, какой тип файла отправляем, или формат файла не является стандартным, следует заголовку content-type присвоить значение application/octet-stream.
content-type: application/octet-stream; name=»file.dat»
Для окончательного закрепления материала напишем функцию, которая отправляет письмо в
html-формате по указанному адресату с прикрепленным файлом:
Отправка файла по e-mail на PHP
В этой статье я собираюсь осветить тему отправки файлов по e-mail на PHP. Задача эта весьма популярная, а вот многие не знают, как это делается и научились только отправлять обычные письма без вложенных файлов. Этот пробел я постараюсь заполнить.
Я написал скрипт, который Вы смело можете копировать и использовать в своих скриптах. Данный код позволяет отправлять файлы по e-mail через PHP:
Скрипт достаточно хорошо прокомментирован, но я добавлю ещё один важный момент. Обратите внимание, что если идут вложенные файлы, то текст письма нужно тоже делать, как прикрепление к письму, однако, тип содержимого будет другой. Это весьма серьёзная особенность, если не сделать так, то текст письма отправлен не будет. Это очень частая ошибка, поэтому обратите на это особое внимание.
Данный PHP-скрипт для отправки файлов по e-mail сделан максимально коротким, он универсален, поэтому Вы можете его дорабатывать под свои нужды так, как пожелаете.
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Комментарии ( 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-2021 Русаков Михаил Юрьевич. Все права защищены.
Labdes

И так, для того чтобы запулить письмо с вложениями то нам нужно правильно прописать заголовки письма, и насколько я разобрался в теме то в этих же заголовках и передаются прикрепленные наши файлы. Давайте начнем с функции которая будет непосредственно отправлять письмо с файлами. Я ее честно нашел вот тут, за что ребятам большое спасибо.
Здесь все вроде почти просто. Мы должны передать необходимые значения в виде, от кого, кому, тему письма, текст сообщения и путь к нашему файлу или файлам если их несколько. Внутри функции в цикле прогоняется массив с файлами и формируется путь до наших файлов, которым мы предварительно залили на сервер.
Теперь сама форма с текстом и прочими плюшками. Поля могут быть какими угодно, для нас главное поле input=file у которого должен стоять атрибут multiple позволяющий выделять несколько файлов, либо можно сделать несколько полей с input=file но главное чтобы у них было name одинаковое. И во всех случаях name должно быть со скобками в конце дающее понять скрипту, что у нас массив а не одиночный файл, например name=myfile[].
Напоминаю вам, что все получаемые данные должны вами проверяться.
Осталось заполнить наши переменные для передачи:
Начнем с адреса куда отправить, пусть у нас их будет два, один для отладки свой, второй клиента:
Переменную From я почему то у себя обозвал как email:
Иногда нужно сделать конвертацию текста, тогда можно сделать так:
Теперь сами заголовки. У меня почему то именно mail.ru и только он все письма принимал в крякозябрах. Пришлось прогонять текст темы письма следующим образом:
Ну и отправляем. Если была отправка без файлов, то отправляем простейшей функцией без изысков:
Финальная отправка если были переданы файлы:
Надеюсь общий смысл ясен и какие то недочеты ребята вы сами поправите. Главное смысл. Если есть комментарии пожалуйста отписывайтесь где что не так. Я не претендую на истину, сам в заголовках этих плаваю, так что если будут пояснения то я их только приветствую!
Отправка файлов на почту методом Post через форму
Но этот код закачивает файлы на сервер, а нужно чтобы сразу отправлял на почту.
Подскажите, как?
Заранее благодарна.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Отправка на почту данных, которые заполнялись через форму.
Возможно ли сделать с помощью ASP следующее: Существует некая страница.
Отправка переменных методом POST через AJAX
Как осуществить отправку данных методом POST на сервер через AJAX? Вот к примеру код.
Отправка нескольких файлов через форму
Доброго времени суток! Есть форма, в которой есть произвольное кол-во input’ов для отправки файлов.
Вместо copy используйте функцию для отправки почты, очевидно же?
Посмотрите, например, в сторону PHPMailer, он умеет отправлять письма с вложениями.
Там описано как должно выглядеть письмо с прикрепленными файлами.
Кто-нибудь еще помочь может?
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Загрузка файлов методом post через multipart/form-data
Проблема следующая: пытаюсь загрузить картинку на сервер vk.com указанным в заголовке методом. Все.
Отправка файлов на почту
Здравствуйте! Подскажите, пожалуйста, как реализовать такую функцию: у меня на обычной HTML.
Отправка файлов на почту
Подскажите материал для изучения. Хочу научиться программно работать с интернетом допустим на том.







