Php отправить письмо с вложением

Отправка писем в php осуществляется с помощью функции mail()

to — емайл получателя
subject — заголовок письма
message — текст письма, сообщение
mailheaders — почтовые заголовки

Отправка обычного текстового письма

Это самый простой способ отправки писем. Вы просто указываете емайл получателя, отправителя и формат text/plain в заголовке. Далее идет пример

Отправка html-письма, в которое можно вставлять таблицы, рисунки, различные шрифты, стили оформления

Отправка писем в html формате почти ничем не отличается от отправки писем в текстовом формате. В заголовке вы указываете формат письма text/html а в самом письме вместо обычного текста помещаете html-код.

Рассмотрим на примере

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

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

Отправка писем сразу нескольким адресатам

Чтобы отправить письмо сразу нескольким адресатам, лучше всего использовать заголовок Bcc: который отправляет копию письма на указанный емайл

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

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

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

Это полностью рабочий код отправки письма с вложением, в чем проблема?

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

а если мне нужно отправить два файла в одном письме? что нужно добавить в этот скрипт?

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

Ошибка у тебя при таком расположении ,
Fatal error: Uncaught Error: Call to undefined function sendMailAttachment()

а если поставить в таком то работает :
function sendMailAttachment($mailTo, $from, $subject, $message, $file = false) <
$separator = «—«; // разделитель в письме
// Заголовки для письма
$headers = «MIME-Version: 1.0
»;
$headers .= «From: $from
Reply-To: $from
»; // задаем от кого письмо
$headers .= «Content-Type: multipart/mixed; boundary=»$separator»»; // в заголовке указываем разделитель
// если письмо с вложением
if($file) <
$bodyMail = «—$separator
»; // начало тела письма, выводим разделитель
$bodyMail .= «Content-type: text/html; charset=’utf-8’
»; // кодировка письма
$bodyMail .= «Content-Transfer-Encoding: quoted-printable»; // задаем конвертацию письма
$bodyMail .= «Content-Disposition: attachment; filename==?utf-8?B?».base64_encode(basename($file)).»?=

»; // задаем название файла
$bodyMail .= $message.»
»; // добавляем текст письма
$bodyMail .= «—$separator
»;
$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)).»?=
»;
$bodyMail .= «Content-Transfer-Encoding: base64
»; // кодировка файла
$bodyMail .= «Content-Disposition: attachment; filename==?utf-8?B?».base64_encode(basename($file)).»?=

»;
$bodyMail .= chunk_split(base64_encode($contentFile)).»
»; // кодируем и прикрепляем файл
$bodyMail .= «—«.$separator .»—
»;
// письмо без вложения
>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)?’Письмо отправлено’:’Ошибка. Письмо не отправлено!’;

ток в таком порядке отправляет пустой файл с размером 0байт . как это исправить?

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

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

3 ответа 3

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

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

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

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

Оцените статью
Много толка
Добавить комментарий