BLASSENweb

Odeslání mailu s přílohou
Publikováno: Středa, 09.04. 2008 - 21:58:46
Téma: PHP & MySQL


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ŘÍLOHYUPRAVTE 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 != && $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






Tento článek si můžete přečíst na webu BLASSENweb
http://blassenweb.net

Tento článek najdete na adrese:
http://blassenweb.net/clanky/odeslani-mailu-s-prilohou/313
Magic SEO URL - Optimalizace pro vyhledávače