Отправка писем в 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
Три простых шага для решения данной проблемы:
- Посмотреть на календарь и уточнить, какой сейчас век на дворе.
- Аккуратно выделить этот код, и нажать клавишу Del
- Скачать phpmailer
- Забыть все эти кустарные ковыряния как страшный сон.
В итоге код должен получиться примерно таким:
следует понимать, что отправка почты — это не просто копирование в свой скрипт каких-то определенных сочетаний символов, к оторые случайно сработали в прошлом веке у автора какой-либо допотопной статьи. Это гораздо более сложный процесс, который включает множество нюансов. И поэтому отправку почты надо не лепить вручную из подручных средств на ходу, а доверить проверенному и отлаженному решению.