Php отправить сообщение в файл

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

В этой статье я приведу пример того, как можно с помощью php и функции mail() отправлять письма с прикрепленными файлами.
Чтобы было наглядней и понятней всю основную часть я вынес в функцию. Код подробно прокомментирован, поэтому что-либо писать нет смысла, просто приведу код:

// пример использования $file = "./files/test.txt"; // файл $mailTo = "admin@vk-book.ru"; // кому $from = "test@files.com"; // от кого $subject = "Test file"; // тема письма $message = "Тестовое письмо с вложением"; // текст письма $r = sendMailAttachment($mailTo, $from, $subject, $message, $file); // отправка письма c вложением echo ($r)?'Письмо отправлено':'Ошибка. Письмо не отправлено!'; //$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка письма без вложения //echo ($r)?'Письмо отправлено':'Ошибка. Письмо не отправлено!'; /** * Отправка письма с вложением * @param string $mailTo * @param string $from * @param string $subject * @param string $message * @param string|bool $file - не обязательный параметр, путь до файла * * @return bool - результат отправки */ function sendMailAttachment($mailTo, $from, $subject, $message, $file = false)< $separator = "---"; // разделитель в письме // Заголовки для письма $headers = "MIME-Version: 1.0\r\n"; $headers .= "From: $from\nReply-To: $from\n"; // задаем от кого письмо $headers .= "Content-Type: multipart/mixed; boundary=\"$separator\""; // в заголовке указываем разделитель // если письмо с вложением if($file)< $bodyMail = "--$separator\n"; // начало тела письма, выводим разделитель $bodyMail .= "Content-type: text/html; charset='utf-8'\n"; // кодировка письма $bodyMail .= "Content-Transfer-Encoding: quoted-printable"; // задаем конвертацию письма $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n"; // задаем название файла $bodyMail .= $message."\n"; // добавляем текст письма $bodyMail .= "--$separator\n"; $fileRead = fopen($file, "r"); // открываем файл $contentFile = fread($fileRead, filesize($file)); // считываем его до конца fclose($fileRead); // закрываем файл $bodyMail .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode(basename($file))."?=\n"; $bodyMail .= "Content-Transfer-Encoding: base64\n"; // кодировка файла $bodyMail .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode(basename($file))."?=\n\n"; $bodyMail .= chunk_split(base64_encode($contentFile))."\n"; // кодируем и прикрепляем файл $bodyMail .= "--".$separator ."--\n"; // письмо без вложения >else < $bodyMail = $message; >$result = mail($mailTo, $subject, $bodyMail, $headers); // отправка письма return $result; >

Отправка письма с вложением на php: 14 комментариев

Ежу может и понятно, а мне вот нет.
Искал в поиске — форму отправки с сайта, письма с вложением.
Натолкнулся на эту страницу.
Нихрена не понятно. Как использовать, чего куда вставлять ….

Читайте также:  About static class in java

Если нужен был просто рабочий код, то читатели могли бы просто взять его с PEAR. Вам стоило внести больше объяснения в код.

Чувак хорошо все расписал, написал красиво код и все понятно комментировал.
Кто не понял, ну блин, почитайте в книге, там может понятнее.

Ошибка у тебя при таком расположении ,
Fatal error: Uncaught Error: Call to undefined function sendMailAttachment() а если поставить в таком то работает :
function sendMailAttachment($mailTo, $from, $subject, $message, $file = false) $separator = «—«; // разделитель в письме
// Заголовки для письма
$headers = «MIME-Version: 1.0\r\n»;
$headers .= «From: $from\nReply-To: $from\n»; // задаем от кого письмо
$headers .= «Content-Type: multipart/mixed; boundary=\»$separator\»»; // в заголовке указываем разделитель
// если письмо с вложением
if($file) $bodyMail = «—$separator\n»; // начало тела письма, выводим разделитель
$bodyMail .= «Content-type: text/html; charset=’utf-8’\n»; // кодировка письма
$bodyMail .= «Content-Transfer-Encoding: quoted-printable»; // задаем конвертацию письма
$bodyMail .= «Content-Disposition: attachment; filename==?utf-8?B?».base64_encode(basename($file)).»?=\n\n»; // задаем название файла
$bodyMail .= $message.»\n»; // добавляем текст письма
$bodyMail .= «—$separator\n»;
$fileRead = fopen($file, «r»); // открываем файл
$contentFile = fread($fileRead, filesize($file)); // считываем его до конца
fclose($fileRead); // закрываем файл
$bodyMail .= «Content-Type: application/octet-stream; name==?utf-8?B?».base64_encode(basename($file)).»?=\n»;
$bodyMail .= «Content-Transfer-Encoding: base64\n»; // кодировка файла
$bodyMail .= «Content-Disposition: attachment; filename==?utf-8?B?».base64_encode(basename($file)).»?=\n\n»;
$bodyMail .= chunk_split(base64_encode($contentFile)).»\n»; // кодируем и прикрепляем файл
$bodyMail .= «—«.$separator .»—\n»;
// письмо без вложения
>else $bodyMail = $message;
>
$result = mail($mailTo, $subject, $bodyMail, $headers); // отправка письма
return $result;
>
// пример использования
$file = «./files/test.txt»; // файл
$mailTo = «admin@vk-book.ru»; // кому
$from = «test@files.com»; // от кого
$subject = «Test file»; // тема письма
$message = «Тестовое письмо с вложением»; // текст письма
$r = sendMailAttachment($mailTo, $from, $subject, $message, $file); // отправка письма c вложением
echo ($r)?’Письмо отправлено’:’Ошибка. Письмо не отправлено!’;
//$r = sendMailAttachment($mailTo, $from, $subject, $message); // отправка письма без вложения
//echo ($r)?’Письмо отправлено’:’Ошибка. Письмо не отправлено!’;

Читайте также:  Scanner scan new scanner system in java

Источник

Отправка файла по e-mail на PHP

Отправка файла по e-mail на PHP

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

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

$filename = «form.txt»; //Имя файла для прикрепления
$to /cdn-cgi/l/email-protection» data-cfemail=»76171415361b171f1a580403″>[email protected]»; //Кому
$from /cdn-cgi/l/email-protection» data-cfemail=»05616063456268646c692b666a68″>[email protected]»; //От кого
$subject = «Test»; //Тема
$message = «Текстовое сообщение»; //Текст письма
$boundary = «—«; //Разделитель
/* Заголовки */
$headers = «From: $from\nReply-To: $from\n»;
$headers .= «Content-Type: multipart/mixed; boundary=\»$boundary\»»;
$body = «—$boundary\n»;
/* Присоединяем текстовое сообщение */
$body .= «Content-type: text/html; charset=’utf-8’\n»;
$body .= «Content-Transfer-Encoding: quoted-printablenn»;
$body .= «Content-Disposition: attachment; filename==?utf-8?B?».base64_encode($filename).»?=\n\n»;
$body .= $message.»\n»;
$body .= «—$boundary\n»;
$file = fopen($filename, «r»); //Открываем файл
$text = fread($file, filesize($filename)); //Считываем весь файл
fclose($file); //Закрываем файл
/* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */
$body .= «Content-Type: application/octet-stream; name==?utf-8?B?».base64_encode($filename).»?=\n»;
$body .= «Content-Transfer-Encoding: base64\n»;
$body .= «Content-Disposition: attachment; filename==?utf-8?B?».base64_encode($filename).»?=\n\n»;
$body .= chunk_split(base64_encode($text)).»\n»;
$body .= «—«.$boundary .»—\n»;
mail($to, $subject, $body, $headers); //Отправляем письмо
?>

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

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

Создано 06.01.2012 16:07:44

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

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

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

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

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

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

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 20 ):

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

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

    Источник

    Отправка почты средствами PHP

    Работая над проектом, мне пришлось создать специфичную «анкету соискателя» в котором надо была отправлять всю анкету на указные за ране e-mail адрес, и я сразу же вспомнил про PHP функцию mail().

    bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]]) 
    • E-mail получателя
    • Заголовок письма
    • Текст письма
    • Дополнительные заголовки письма
    • Дополнительные параметры командной строки
    • true, если письмо было принято к доставке
    • false, в противном случае.
    Простейший пример
    Перейдем к более сложному примеру
    Текст письма


    1-ая строчка
    2-ая строчка
    '; $headers = "Content-type: text/html; charset=windows-1251 \r\n"; $headers . ; $headers .= "Reply-To: reply-to@example.com\r\n"; mail($to, $subject, $message, $headers); ?>

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

    Переменные $subject и $message, не буду описывать, это и так понятно.

    • В первой строчке ми определяем ты отправляемого письма-HTML и кодировку windows-1251.
    • В 2-ом мы указываем от кого пришло письмо.
    • В 3-ем указываем e-mail адрес, для ответа на письмо.
    А теперь самое интересное отправка письма c вложением (attachment)
    $subject = "тема письма"; $message ="Текст сообщения"; // текст сообщения, здесь вы можете вставлять таблицы, рисунки, заголовки, оформление цветом и т.п. $filename = "file.doc"; // название файла $filepath = "files/file.doc"; // месторасположение файла //исьмо с вложением состоит из нескольких частей, которые разделяются разделителем $boundary = "--".md5(uniqid(time())); // генерируем разделитель $mailheaders = "MIME-Version: 1.0;\r\n"; $mailheaders .="Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; // разделитель указывается в заголовке в параметре boundary $mailheaders . ; $mailheaders .= "Reply-To: $user_email\r\n"; $multipart = "--$boundary\r\n"; $multipart .= "Content-Type: text/html; charset=windows-1251\r\n"; $multipart .= "Content-Transfer-Encoding: base64\r\n"; $multipart .= \r\n; $multipart .= chunk_split(base64_encode(iconv("utf8", "windows-1251", $message))); // первая часть само сообщение // Закачиваем файл $fp = fopen($filepath,"r"); if (!$fp) < print "Не удается открыть файл22"; exit(); >$file = fread($fp, filesize($filepath)); fclose($fp); // чтение файла $message_part = "\r\n--$boundary\r\n"; $message_part .= "Content-Type: application/octet-stream; name=\"$filename\"\r\n"; $message_part .= "Content-Transfer-Encoding: base64\r\n"; $message_part .= "Content-Disposition: attachment; filename=\"$filename\"\r\n"; $message_part .= \r\n; $message_part .= chunk_split(base64_encode($file)); $message_part .= "\r\n--$boundary--\r\n"; // второй частью прикрепляем файл, можно прикрепить два и более файла $multipart .= $message_part; mail($to,$subject,$multipart,$mailheaders); // отправляем письмо //удаляем файлы через 60 сек. if (time_nanosleep(5, 0)) < unlink($filepath); >// удаление файла 

    Источник

    Оцените статью