<?php
#######################################################################################
# Пример 03. Манипулации с E-MAIL. Изпращане на e-mail с прикрепване на файл
# Автор : Алдениз Рашидов, Технически университет - Габрово
# Последна промяна : 10/11/2009
# Идеята е взаимствана от http://bg2.php.net/manual/en/function.mail.php#83491
# Необходимо е да се установяват параметри в PHP.INI за SMTP сървър ->
# 1. SMTP = IP.IP.IP.IP
# 2. smtp_port = 25
#######################################################################################
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Манипулации с E-MAIL. Пример 3 - SEND E-MAIL WITH ATTACHMENT FILE</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<html>
<body>
<h2>Изпращане на HTML E-mail с прикрепване на файл</h2>
<?
if ($_POST['flag'] == 1)
{
if(is_uploaded_file($_FILES['att']['tmp_name']) &&
!empty($_FILES['att']['size']) && !empty($_FILES['att']['name'])){
$attach =1; // има прикачен файл
$handle =fopen($_FILES['att']['tmp_name'], 'rb');
$f_contents =fread($handle, $_FILES['att']['size']);
$attachment =chunk_split(base64_encode($f_contents));
fclose($handle);
$ftype =$_FILES['att']['type'];
$fname =$_FILES['att']['name'];
}
// Входни параметри
$HTML = "<b>============ This is a test! Това е тест! ============</b>"; // тяло на e-mail
$from = "aldeniz@tugab.bg"; // източник на съобщението
$to = "aldeniz@tugab.bg"; // приемник на съобщението
$confirm = "aldeniz@tugab.bg"; // потвърждение за прието съобщението
$replay = "aldeniz@tugab.bg"; // отговор към ...
$subject = "Тест на HTML email"; // заглавие на съобщението
$charset = "windows-1251"; // кодова таблица на съобщението
function sendHTMLemail($HTML,$from,$to,$confirm,$replay,$subject,$charset)
{
global $ftype,$fname,$attach,$attachment;
// Заглавна част на съобщението
// Задаване на MIME версия
$headers = "MIME-Version: 1.0\r\n";
// Задаване на "from" адрес
$headers .= "From: $from\r\n";
// Задаване на приоритет на съобщението
$headers .= "X-Priority: 1\r\n"; // 1 -> high, 3 -> normal
// Алтернативен метод за приоритет -> X-Priority // hight - > 1
$headers .= "X-MSMail-Priority: High\r\n";
// E-mail приемник на потвърждение при прието съобщение от $to
$headers .= "Disposition-Notification-To: $confirm\r\n";
// Задаване на идентификация на програмата която извършва изпращането
$headers .= "X-Mailer: PHP/" . phpversion()."\r\n";
// E-mail за отговор - използва се при избор на Replay на email клиента. Може да не се зададе!
$headers .= "Reply-To:$replay\r\n";
// Създаване на уникални имена за ограничаване на областите в тялото на съобщението
// boundary so we know where to look for the start of the data
$boundary1 = uniqid("HTMLEMAIL");
$boundary = uniqid("HTMLEMAIL");
if ($attach==1) {
// Деклариране на тип на съдържанието на разширена област включваща текстова част, HTML част и прикрепен файл
$headers .= "Content-Type: multipart/mixed; ".
"boundary = $boundary1\r\n\r\n";
} else
// Деклариране на тип на съдържанието на разширена област включваща текстова част и HTML част
$headers .= "Content-Type: multipart/alternative;".
"boundary = $boundary\r\n\r\n";
// ТЯЛО НА СЪОБЩЕНИЕТО
// В случай, че е прикрепен файл към съобщението се указва <начало на област на прикрепен файл>
if ($attach==1)
$body .= "--$boundary1\r\n".
// Задаване на MIME версия на тялото
$body .= "MIME-Version: 1.0\r\n";
// Деклариране на тип на съдържанието на разширена област с текстова и HTML версия
$body .= "Content-Type: multipart/alternative; ".
"boundary = $boundary\r\n\r\n";
$body .= "This is a MIME encoded message.\r\n\r\n";
// Указване на начало на областта на текстовата версия
// , деклариране на тип на съдържанието, кодова таблица и кодиране
$body .= "--$boundary\r\n".
"Content-Type: text/plain; charset=$charset\r\n".
"Content-Transfer-Encoding: base64\r\n\r\n";
// Добавяне на текстовото съдържание на съобщението
// като с chunk_split се разбива на редове от по определен брой (76) символи
$body .= chunk_split(base64_encode(strip_tags($HTML)));
// Указване на начало на областта на HTML версия
// , деклариране на тип на съдържанието, кодова таблица, кодиране
$body .= "--$boundary\r\n".
"Content-Type: text/html; charset=$charset\r\n".
"Content-Transfer-Encoding: base64\r\n\r\n";
// Добавяне на HTML съдържанието на съобщението,
$body .= chunk_split(base64_encode($HTML));
// Указва край на областта
$body .= "--$boundary--\r\n\r\n";
// В случай че има прикрепен файл
if ($attach==1) {
// Указване на начало на област за прикрепен файл към съобщението
$body .="--$boundary1\r\n";
// Деклариране на тип на съдържанието на областта, кодиране
$body .="Content-Type: $ftype; name=\"$fname\"\r\n";
$body .="Content-Transfer-Encoding: base64\r\n";
$body .="Content-Disposition: attachment; filename=\"$fname\"\r\n\r\n";
// Добавяне на съдържание на прикрепеният файл
$body .=$attachment."\r\n\r\n";
// Указва край на областта
$body .= "--$boundary1--\r\n";
}
// Изпращане на съобщението ...
mail($to,$subject,$body,$headers);
}
sendHTMLemail($HTML,$from,$to,$confirm,$replay,$subject,$charset);
}
?>
<div id="body">
<form action="" method="post" enctype="multipart/form-data">
<input type="hidden" name="flag" value="1">
<input name="att" type="file">
<input name="upload" type="submit" value="Attach">
</form>
</div>
</body>
</html>