php mail attach file
Отправка файла по 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 Русаков Михаил Юрьевич. Все права защищены.
Вменяемая инструкция к 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 Mail ()?
Мне нужно отправить pdf с почтой, это возможно?
чего мне не хватает?
13 ответов:
Я согласен с @MihaiIorga в комментариях-используйте скрипт PHPMailer. Ты говоришь так, будто отвергаешь его, потому что хочешь более простой вариант. Поверь мне, PHPMailer и более простой вариант с очень большим запасом по сравнению с попыткой сделать это самостоятельно с помощью встроенного PHP
вы можете попробовать использовать следующий код:
Редактировать 14-Июнь-2018
для большей читаемости в некоторых из поставщиков электронной почты используйте
для PHP 5.5.27 обновление безопасности
Swiftmailer еще один простой в использовании скрипт, который автоматически защищает против инъекция электронной почты и делает вложения ветерок. Я также настоятельно рекомендую использовать встроенный PHP
чтобы отправить электронное письмо с вложением, нам нужно использовать тип multipart / mixed MIME, который указывает, что смешанные типы будут включены в электронное письмо. Кроме того, мы хотим использовать составной/альтернативный тип MIME для отправки как обычного текста, так и HTML-версии электронной почты.Взгляните на пример:
Как вы можете видеть, отправка электронной почты с вложением легко выполнить. В предыдущем примере мы имеем тип multipart / mixed MIME, и внутри него мы имеем multipart / alternative MIME тип, указывающий две версии сообщения электронной почты. Чтобы включить вложение в наше сообщение, мы читаем данные из указанного файла в строку, кодируем его с помощью base64, разделяем его на более мелкие куски, чтобы убедиться, что он соответствует спецификациям MIME, а затем включаем его в качестве вложения.
после борьбы в течение некоторого времени с плохо отформатированными вложениями, это код, который я в конечном итоге использовал:
php send email with attachment
i take snippet from this place Click here
In this site, snippet works fine,
Even i got the mail, but attachment is not working, am getting attment as noname with 0kb
5 Answers 5
If you are NOT trying to learn how to do it by hand, and just want to send an email with attachment, then you are better of using some sort of library for that. I recommend SwiftMailer, I tried a lot of libraries and this one works best. Check how easy it is to add an attachment using SwiftMailer here: http://swiftmailer.org/docs/attaching-files
Your best bet is to use the Mime Mail PEAR library for handling attachments. It’s much easier and cleaner and you’ll be less prone to errors.
You can attach files to an email simply like this:
If you just want to send a simple form with a single attachment this code is probably the best and easiest thing to use is the following code it works well.
I did not see the answer to your question anywhere above, so I will attempt to provide a little more information that might help.
I had the same exact problem just today. I built a series of PDF files, which then were converted to a single tar.gz file and this file bundle I wanted to email to a human processing agent who would respond to these documents in kind. However, when I used the various scripts to generate the correct MIME message format, I ended up sending an attachment that was 0 kB in total size with the name «noname».
With so many people all providing the same answer, I thought to myself that there answers must be correct and that the problem must be somewhere else. The answer to the problem is not the formatting of the message content, nor is it in your headers. Everything there is correct. The problem lies in the mail applications that exist between your application and the recipient e-mail address.
I moved my code to a production server and the message sent without any problems, and the same file that previously sent as «noname 0kb» now was sent as «MikeyPoochigian_2013_05_10__16_28_27.tar.gz 241kb».
I don’t know yet what causes this particular failure, but I imagine it is a similar answer to one that I learned earlier this year when my mail application was sending to gmail but not sending to other mail servers. In that particular case, the mail applications were filtering content for SPAM between my development laptop (which had the internal domain of DevelopmentLaptop.local) and the final e-mail address. Because my originating server sent from the domain «DovelopmentLaptop.local», and because this domain was not registered with any DNS as a known address, those mail servers interpreted my test messages as spam. I suspect the same problem is interfering now with the messages that are being sent.
Long answer now short (if that is possible), try porting your code to a production server with a registered public domain and see if it works. If it does, then it is not your code that needs to be fixed. Your code is likely to be fine.
Php mail attach file
При помощи этого примера удалось даже налету создать rtf и домазать к письму.
$un = strtoupper(uniqid(time()));
$m =»HELO\n»;
$m.=»MAIL FROM: srz@srz-holding.ru\n»;
$m.=»RCPT TO: srz@srz-holding.ru\n»;
$m.=»DATA\n»;
$m.=»FROM: srz@srz-holding.ru\n»;
$m.=»To: srz@srz-holding.ru\n»;
$m.=»Subject: SIMPLE TEST\n»;
$m.=»MIME-Version: 1.1
Content-Type: multipart/mixed; boundary=\»———-C0BB13F44576C2\»
————C0BB13F44576C2
Content-Type: text/plain; charset=Windows-1251
Content-Transfer-Encoding: quoted-printable
srz mailto:srz@srz-holding.ru
————C0BB13F44576C2
Content-Type: application/octet-stream; name=\»$filename\»
Content-transfer-encoding: base64
Content-Disposition: attachment; filename=\»$filename\»
$fp = fsockopen(«192.168.0.1», 25, &$errno, &$errstr);
if(!$fp)
<
echo «$errstr ($errno)
\n»;
>
else
<
fputs($fp,$m);
fclose($fp);
echo»That’s OK «;
>
———
Говорит что все отправлено успешно, а на серваке сервис ругается, что:
read failed. Error Code=connection reset by peer
failed to receive message body (250407 bytes). Error Code=connection reset by peer
отправляет не все типы файлов и не любого размера.
Подскажите в чем проблема?
Файл не успевает сохраняться на сервере.
Как сделать правильно?
Желательно избежать функции sleep.