Už dlouho jsem do této kategorie nanapsal žádný článek, tak by se hodilo, to nějak napravit.
Protože se pořád někdo ptá jak odeslat email s přílohou, tak jsem se rozhodl zveřejnit script který je vyzkoušený a funguje.
Asi by bylo slušné poznamenat, že tento script jsem nevymyslel, pouze upravil a trochu zjednodušil.Otevřte oba soubory textovým editorem (např. poznámkový blok). Zadejte svůj vlastní email v řádku 14 souboru mailer.php. Další změny pravděpodobně nebudou zapotřebí.
1. Změna velikosti přílohy - nutno provést v obou souborech index.html i mailer.php.
mailer.php v řádku 12
index.html v řádcích 28 a 40
2. Skript má jistá omezení, aby se zabránilo zasílání virů.
2.1 Je povoleno pouze zasílání některých typů souborů.
V souboru mailer.php můžete přidat nebo odstranit MIME type v řádcích 52-64. Jestli řádky nechcete natrvalo vymazat, můžete je zrušit vykomentováním 2 lomítky na začátku řádku. Zasláním nepovoleného typu souboru se zobrazí jeho MIME type, který můžete přidat do seznamu povolených v mailer.php.
2.2 Je povoleno pouze zasílání některých extenzí (přípon v názvu souboru).
V souboru mailer.php můžete přidat nebo odstranit extenze v řádcích 79-90. Jestli řádky nechcete natrvalo vymazat, můžete je zrušit vykomentováním 2 lomítky na začátku řádku.
2.3 Název souboru smí obsahovat pouze 1 tečku, protože viry často mají matoucí jména s několika tečkami a extenzemi.
2.4 Extenze musí být 3 nebo 4 znaky dlouhá.
3. Formulář v index.html můžete upravit přidáním dalších vstupních polí, kontroly dat JavaScriptem a libovolných stylů.
Obsah souboru index.html by mohl vypadat třeba takto:
{ Kód }:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Odeslání přílohy</title>
<meta http-equiv=Content-Type content="text/html; charset=windows-1250">
</head>
<body style="background-color:white; color:black">
<form enctype="multipart/form-data" method="post" action="mailer.php">
<table style="background-color:gainsboro; color:black; font:normal 11px Arial" border="0">
<tr>
<td align="center" colspan="2">
<b>Odeslání přílohy</b></td>
</tr>
<tr><td >Jméno:</td><td><input name="Jmeno" type="text" style="width:150px;"></td></tr>
<tr><td >Email:</td><td><input name="Odesilatel" type="text" style="width:150px;"></td></tr>
<tr><td>Text:</td><td><textarea name="Text" cols="20" rows="2" style="width:150px;"></textarea></td></tr>
<tr>
<td align="center" colspan="2">
<!-- ---------------------------------------------------- -->
<!-- ---------------------------------------------------- -->
<p style="text-align:justify">Max.velikost přílohy 50000 bajtů.</p>
<!-- ---------------------------------------------------- -->
<!-- ---------------------------------------------------- -->
</td>
</tr>
<tr>
<td align="left" colspan="2">
<!-- ---------------------------------------------------- -->
<!-- MAXIMÁLNÍ VELIKOST PŘÍLOHY. UPRAVTE TÉŽ V mailer.php -->
<input type="hidden" name="MAX_FILE_SIZE" value="50000">
<!-- ---------------------------------------------------- -->
<!-- ---------------------------------------------------- -->
<input name="fileatt" type="file" size="10">
</td>
</tr>
<tr>
<td align="center" colspan="2"><input name="submitter" type="button" onclick="alert('Tato ukázka úmyslně není funkční')" xtype="submit" value="Odeslat"></td>
</tr>
</table>
</form>
</body>
</html>
obsah souboru mailer.php (větší změny nejsou zapotřebí)
{ Kód }:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Odeslání přílohy</title>
<meta http-equiv=Content-Type content="text/html; charset=windows-1250">
<meta http-equiv="Content-Language" content="cs">
</head>
<body style="background-color:white; color:black">
<?php
///////////////////// MAXIMÁLNÍ VELIKOST PŘÍLOHY. UPRAVTE TÉŽ V index.html
$max_att = 50000;
/////////////////////// ZADEJTE SVŮJ EMAIL ZDE ///////////////////
$to = 'vasEmail@vasServer.cz';
//////////////////////////////////////////////////////////////////
$charset = 'windows-1250';
if(!isset($_POST['submitter'])) exit('<h1>Error 1</h1>');
$subject = 'Priloha z webu';
$from = $_POST['Odesilatel'];
$message .= 'Odesláno ze stránky: ' . $_SERVER['HTTP_REFERER'] . "\r\n";
while (list($name, $value) = each($_POST)) {
if ($name == 'MAX_FILE_SIZE' || $name == 'charset' || $name == 'submitter') {
}
elseif (gettype($value) == 'array') { // TAG SELECT MULTIPLE
$cnt = count($value);
for ($i=0; $i < $cnt; $i++) {
$message .= "$name: $value[$i]r\\n";
}
}
else { // OSTATNÍ ELEMENTY
$message .= "$name: $value\r\n";
}
}
$valid = 1;
$file_size = $_FILES['fileatt']['size'];
$file_name = $_FILES['fileatt']['name'];
$file_type = $_FILES['fileatt']['type'];
if ($file_size > 0) $att_present = true;
$message .= "VELIKOST PŘÍLOHY: $file_size bytes\r\n\n";
if($att_present) {
if($file_size > $max_att) {
$valid = 0;
$err_msg .= "<p>Příloha je větší nežli povolených $max_att bajtů";
}
if (
$file_type != 'text/plain' // TXT
&& $file_type != 'text/html' // HTM
&& $file_type != 'text/html' // HTML
&& $file_type != 'image/gif' // GIF
&& $file_type != 'image/jpeg' // JPG JPEG
&& $file_type != 'image/pjpeg' // JPG JPEG
&& $file_type != 'image/png' // PNG
&& $file_type != 'image/x-icon' // ICO
&& $file_type != 'application/msword' // DOC
&& $file_type != 'application/excel' // XLS
&& $file_type != 'application/rtf' // RTF
&& $file_type != 'application/octet-stream' // DOC
&& $file_type != 'application/x-zip-compressed' // ZIP
&& $file_type != 'application/pdf'
) { // PDF
$valid = 0;
$err_msg .= "<p>Skript nepodporuje tento typ souboru $file_type";
}
$dots = substr_count($file_name,'.');
if($dots != 1) {
$valid = 0;
$err_msg .= "<p>Příloha má nepovolený počet extenzí $dots";
}
$extension = strtolower(strstr($file_name,'.'));
if (
$extension != ".txt"
&& $extension != ".htm"
&& $extension != ".html"
&& $extension != ".gif"
&& $extension != ".jpg"
&& $extension != ".jpeg"
&& $extension != ".png"
&& $extension != ".ico"
&& $extension != ".doc"
&& $extension != ".xls"
&& $extension != ".rtf"
&& $extension != ".zip"
&& $extension != ".pdf"
) {
$valid = 0;
$err_msg .= "<p>Skript nepodporuje extenzi $extension";
}
$p = strlen($extension);
if($p != 4 && $p != 5) {
$valid = 0;
$err_msg .= "<p>Příloha má neplatnou délku extenze $p";
}
if($valid == 1){
$fileatt = $_FILES['fileatt']['tmp_name'];
$headers = "From: $from";
if(is_uploaded_file($fileatt)) {
$file = fopen($fileatt,'rb');
$data = fread($file,filesize($fileatt));
fclose($file);
$semi_rand = md5(time());
$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
$message = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type: text/plain; charset=$chrset\n" .
"Content-Transfer-Encoding: 7bit\n\n" .
$message . "\n\n";
$data = chunk_split(base64_encode($data));
$message .= "--{$mime_boundary}\n" .
"Content-Type: {$file_type};\n" .
" name=\"{$file_name}\"\n" .
"Content-Transfer-Encoding: base64\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";
}
$message = StripSlashes($message);
$sent = @mail($to, $subject, $message, $headers);
if($sent) echo "<h1>Formulář byl úspěšně odeslán</h1>";
else echo "<h1>Formulář se nezdařilo odeslat</h1>";
}
if($valid!==1) {
echo "<h2>Chyba...</h2>$err_msg";
echo "<p>Klikněte na Zpět a zkuste znovu";
}
}
else { // není příloha
$message = StripSlashes($message);
$sent = @mail($to, $subject, $message, $headers);
if($sent) echo "<h1>Formulář byl úspěšně odeslán</h1>";
else echo "<h1>Formulář se nezdařilo odeslat</h1>";
}
?>
</body>
</html>
Freeware.
Tento program je volné programové vybavení; můžete jej šířit a modifikovat podle libosti.
Je rozširován v naději, že bude užitečný, avšak BEZ JAKÉKOLI ZÁRUKY; neposkytují se ani odvozené záruky PRODEJNOSTI anebo VHODNOSTI PRO URČITÝ ÚČEL.
Všechny zde popsané soubory si můžete též stáhnout:
Stáhnout zdarma script pro odesílání emailu s přílohou
-- Autor: Neznámý
--úpravy: Blassen