Форма за пращане на майл с прикачен файл
Автор: Melanholly
Това е форма за пращане на e-mail на определен адрес с възможност за прикачане на файл. Ето и кода:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Изпращане на E-Mail с прикачен файл</title>
<style type="text/css">
body{
background-color:#FFFFFF;
color:#000000;
font-size:10px;
font-family: Verdana, Arial, Helvetica, sans-serif;
}
a{
background-color: #FFFFFF;
font-family: verdana;
font-size: 10px;
text-decoration: none;
text-align:center;
color:#000000;
}
a:hover{
text-decoration: underline;
background-color: #99CC00;
}
table{border:1px dashed #000000;}
td{border-bottom:1px dashed #000000;}
.text{padding-top: 8px;}
textarea,input{border:1px dotted #000000;}
</style>
</head>
<body>
<?php
//Записваме адреса на получател всучея
$to="admin@localhost";
//Девинираме формата
$html_form= "<form action=\"?act=send\" method=\"post\" enctype=\"multipart/form-data\">
<table width=\"40%\" border=\"0\">
<tr>
<td align=\"center\" scope=\"row\">От</td>
<td valign=\"top\"><input name=\"from_txt\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"".$_POST['from_txt']."\" /></td>
</tr>
<tr>
<td align=\"center\" scope=\"row\">Тема</td>
<td valign=\"top\"><input name=\"subject\" type=\"text\" size=\"30\" maxlength=\"30\" value=\"".$_POST['subject']."\" /></td>
</tr>
<tr>
<td align=\"center\" valign=\"top\" class=\"text\" scope=\"row\">Съобщението</td>
<td valign=\"top\"><p>
<textarea name=\"suob\" cols=\"40\" rows=\"20\">".$_POST['suob']."</textarea>
</p> </td>
</tr>
<tr>
<td align=\"center\" scope=\"row\">Прикачаване на файл?</td>
<td><input type=\"file\" name=\"att\"></td>
</tr>
<tr align=\"center\" valign=\"top\">
<th colspan=\"2\" scope=\"row\">
<input name=\"send\" type=\"submit\" value=\"Изпрати\" /></th>
</tr>
</table>
</form>
</body>
</html>
";
// Започвам превключването на страниците
switch($_GET['act']){
case "send":
//Проверяваме дали е написан e-mail адреса на подателя и зали е валиден
if($_POST['from_txt']==Null){
echo"<h3>Грешка не сте попълнили полето \"От\"!</h3>$html_form";exit;}
elseif (!ereg("@",$_POST['from_txt']))
{
echo("<h3>Невалиден E-mail адрес, липсва символът @!</h3> $html_form");
exit;
}
else{$from=$_POST['from_txt'];}
//ПРоверяваме дали има зададена тема
if($_POST['subject']==Null){
echo"<h3>Грешка не сте попълнили полето \"Тема\"!</h3>$html_form";exit;}
//Проверяваме дали е попълнено съобщение
if($_POST['suob']==Null){
echo"<h3>Грешка не сте въвели съобщение!</h3>$html_form";exit;}
else{$message=$_POST['suob'];}
//Генерираме произволен hash
$random_hash = md5(date('r', time()));
//Дефинираме header-a на съобщението
$headers = "From: $from";
$headers .= "\r\nContent-Type: multipart/mixed; boundary=\"PHP-mixed-".$random_hash."\"";
//дефинираме кодирането на съобщението - MIME base64
$attachment = chunk_split(base64_encode(file_get_contents($_FILES['att']['tmp_name'])));
//Дефинираме съобщението
ob_start(); //Включваме буфера
?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type: multipart/alternative; boundary="PHP-alt-<?php echo $random_hash; ?>"
--PHP-alt-<?php echo $random_hash; ?>
Content-Type: text/html; charset="windows-1251"
Content-Transfer-Encoding: 7bit
<? echo "<pre>$_POST[suob]<pre>";?>
--PHP-alt-<?php echo $random_hash."--"; if($_FILES['att']['error']==0){//Проверяваме дали има прикачен файл?>
--PHP-mixed-<?php echo $random_hash; ?>
Content-Type:<?echo($_FILES['att']['type']);?>; name="<?echo($_FILES['att']['name']);?>"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
<?php echo $attachment; ?>
--PHP-mixed-<?php echo $random_hash; ?>--
<?php
}
//Копираме съобщението в променливата $message и изчистваме буфера
$message = ob_get_clean();
//Изпращаме E-mail-а
$mail_sent = @mail( $to, $subject, $message, $headers );
//Проверяваме дали съобщението е изпратено успешно
echo $mail_sent ? "Съобщението изпратено." : "Грешка при изпращането моля съобщете на <a href=\"mailto:$to\">администратора<a>.";
break;
default:
echo $html_form;
break;
}
?>В кода съм обяснил всичко ако има някакви въпроси питайте тук. =)
Кода е авторски и е писан специално за Web-Tourist.Net.


