Пример: Написать программу, которая производит рассылку с вложенными файлами на несколько email адресов. Адреса вводятся на форме через запятую.
Текст программы:
<HTML>
<HEAD>
<TITLE>Отправка сообщения с вложением</TITLE>
</HEAD>
<BODY>
<H3> <center><font color="#1E90FF">Отправка сообщения с вложением</font></H3>
<center>
<table width="1" border="0">
<form action="132.php" enctype="multipart/form-data" method="post">
<tr><td width="50%">Кому:</td><td align="right"><input type="text" name="mail_to" maxlength="150"></td></tr>
<tr><td width="50%">Тема:</td><td align="right"><input type="text" name="mail_subject" maxlength="64"></td></tr>
<tr><td colspan="2">Сообщение:<br><textarea cols="50" rows="8" name="mail_msg"></textarea></td>
<tr><td width="50%">Photo:</td><td align="right"><input type="file" name="mail_file" maxlength="64"></td></tr>
</tr><tr><td colspan="2"><input type="submit" value="Отправить"></td></tr>
</form>
</table>
</center>
</BODY>
</HTML>
Текст обработки формы:
<?php
if(empty($_POST['mail_to'])) exit("Введите адрес получателя");
// проверяем правильности заполнения с помощью регулярного выражения
$picture = "";
// Если поле выбора вложения не пустое - закачиваем его на сервер
if (!empty($_FILES['mail_file']['tmp_name']))
{
// Закачиваем файл
$path = $_FILES['mail_file']['name'];
if (copy($_FILES['mail_file']['tmp_name'], $path)) $picture = "$path";
}
$thm = $_POST['mail_subject'];
$msg = $_POST['mail_msg'];
$mail_to = $_POST['mail_to'];
// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to, $thm, $msg);
else {
$mail = split (",", $mail_to);
for($i=0; $i<count($mail); $i++){
echo "$i) ".$mail[$i]."<br>";
if (!preg_match("/^(?:[a-z0-9]+(?:[-_]?[a-z0-9]+)?@[a-z0-9]+(?:\.?[a-z0-9]+)?\.[a-z]{2,5})$/i",trim($mail[$i]))) exit("Введите адрес в виде somebody@server.com");
send_mail($mail[$i], $thm, $msg, $picture);
}
}
// Вспомогательная функция для отправки почтового сообщения с вложением (Trianon)
function send_mail($mail_to, $thema, $html, $path)
{
if ($path) {
$fp = fopen($path,"rb");
if (!$fp)
{ print "Cannot open file";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);
}
$name = $path; // в этой переменной надо сформировать имя файла (без всякого пути)
$EOL = "\r\n"; // ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём
$boundary = "--".md5(uniqid(time())); // любая строка, которой не будет ниже в потоке данных.
$headers = "MIME-Version: 1.0;$EOL";
$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";
$headers .= "From: my@mail.ru";
$multipart = "--$boundary$EOL";
$multipart .= "Content-Type: text/html; charset=windows-1251$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= $EOL; // раздел между заголовками и телом html-части
$multipart .= chunk_split(base64_encode($html));
$multipart .= "$EOL--$boundary$EOL";
$multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";
$multipart .= "Content-Transfer-Encoding: base64$EOL";
$multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";
$multipart .= $EOL; // раздел между заголовками и телом прикрепленного файла
$multipart .= chunk_split(base64_encode($file));
$multipart .= "$EOL--$boundary--$EOL";
if(!mail($mail_to, $thema, $multipart, $headers))
{return False; //если не письмо не отправлено
}
else { //// если письмо отправлено
echo "<p> Письмо отправлено!!!</p>";
return True;
}
exit;
}
?>
Результат роботи програми: