Работая над проектом, мне пришлось создать специфичную «анкету соискателя» в котором надо была отправлять всю анкету на указные за ране e-mail адрес, и я сразу же вспомнил про PHP функцию mail().
bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])
Обязательные параметры:
- E-mail получателя
- Заголовок письма
- Текст письма
Необязательные параметры:
- Дополнительные заголовки письма
- Дополнительные параметры командной строки
Возвращаемое значение:
- true, если письмо было принято к доставке
- false, в противном случае.
Простейший пример
<?php
mail("E-mail получателя", "Загаловок", "Текст письма \n 1-ая строчка \n 2-ая строчка \n 3-ая строчка");
?>
Перейдем к более сложному примеру
<?php
$to = "<mail@example.com>, " ;
$to .= "mail2@example.com>";
$subject = "Заголовок письма";
$message = ' <p>Текст письма</p> </br> <b>1-ая строчка </b> </br><i>2-ая строчка </i> </br>';
$headers = "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: От кого письмо <from@example.com>\r\n";
$headers .= "Reply-To: reply-to@example.com\r\n";
mail($to, $subject, $message, $headers);
?>
В начале мы определяем кому адресовано письмо, за это отвечает переменная &to, если же получателей несколько человек, то записываем через запятую адреса эл. почты.
Переменные $subject и $message, не буду описывать, это и так понятно.
В нашем примере переменная $headers состоит из 3-строк:
- В первой строчке ми определяем ты отправляемого письма-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 .= "From: $user_email <$user_email>\r\n";
$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);
}
// удаление файла