Tipy a Triky - PHP & MySQL

Hodnocení kvality
Autor: Ondřej Polesný
function posli_email($odesilatel,$odesilatel_mail,$adresat,$adresat_mail,$predmet,$zprava,$priloha=false)
{
// (c) Ondřej Polesný 2007 (polesny@email.cz)

// definice oddělovače - musí být unikátní
$mime_boundary = "<<<--==+X[".md5(time())."]";

// nadefinování typických hlaviček
$headers = "From: ".$odesilatel."<".$odesilatel_mail.">\r\n";
$headers .= "To: ".$adresat." <".$adresat_mail.">\r\n";
$headers .= "MIME-Version: 1.0\r\n";

// proměnná zprávy, vložíme do ní informace o kódování a samotnou zprávu
$message = "--".$mime_boundary."\r\n";
$message.= "Content-Type: text/plain; charset=utf-8\r\n";
$message.= strip_tags(str_replace("<br>", "\n", $zprava))."\r\n\r\n";

if(!$priloha[0]["file"])
{
// pokud nemáme přílohu, posíláme jen zprávu
$headers.= "Content-Type: multipart/alternative;\r\n";
}
else
{
// máme-li přílohu, posíláme jak text, tak jiný typ (přílohu) => mixed
$headers .= "Content-Type: multipart/mixed;\r\n";
// bude následovat příloha, kterou oddělíme od textu ve zprávě oddělovačem
$message .= "--".$mime_boundary."\r\n";
}

// dáme do hlavičky definici oddělovače
$headers .= " boundary=\"".$mime_boundary."\"";


// (c) Ondřej Polesný 2007 (polesny@email.cz)
if($priloha[0]["file"])
{
// pokud existuje příloha (první v řadě), projdeme pole proměnné
for($a=0;$a<count($priloha);$a++)
{
if($a>0)
{
// pokud nejde o první přílohu, vložíme oddělovač. Pokud jde o první přílohu, oddělovač jsme již použili výše
$message .= "--".$mime_boundary."\r\n";
}

// zjistíme samotný název souboru
$filename = substr($priloha[$a]["file"], (strrpos($priloha[$a]["file"], "/")+1));
// řekneme, co posíláme
$message .= "Content-Type: ".$priloha[$a]["content_type"].";\r\n";
// a pod jakým jménem
$message .= " name=\"".$filename."\"\r\n";
// soubor zakódujeme, aby ho vůbec bylo možné poslat. Musíme ale říct, jaké kódování používáme.
$message .= "Content-Transfer-Encoding: base64\r\n";
// posíláme jako přílohu, tedy attachment
$message .= "Content-Disposition: attachment;\r\n";
// a pod jakým jménem :)
$message .= " filename=\"".$filename."\"\r\n\r\n";
// před vložením souboru je NAPROSTO NUTNÉ dodržet dvě odřádkování
// vložíme samotný soubor, již zakódovaný (file_get_contents je mnohem lepší než fread, fopen a podobný srandy)
$message .= chunk_split(base64_encode(file_get_contents($priloha[$a]["file"])));
// nakonec oddělíme
$message .= "\r\n";
}
}

// a nakonec celou funkci odešleme...
if(mail($adresat_mail,$predmet,$message,$headers)){
// pokud se úspěšně odešle, máme vyhráno a vrátíme pravdu
return true;
}else{
// pokud se něco nepovedlo, vrátíme nepravdu
return false;
}
}


Takto jsme nadefinovali funkci, volat ji budeme následovně:

<?
if(posli_email("Frank","odesilatel@domena.tld","Jmeno adresata","adresat@domena.tld","Predmet mailu","Zpráva psaná v plain textu...")){
echo "Mail odeslán";
}else{
echo "Mail neodeslán";
}
?>


Pokud budeme chtít poslat přílohu, kterou předtím načítáme z formuláře:

DVA SOUBORY VE FORMULÁŘI:
<?
// předpokládám názvy polí "soubor1" a "soubor2" a vytvořenou složku temp s CHMOD 777
if(isset($_FILES['soubor1']['tmp_name']) AND is_uploaded_file($_FILES['soubor1']['tmp_name'])){

// přesuneme soubor z dočasného úložiště do složky temp
move_uploaded_file($_FILES['soubor1']['tmp_name'],"./temp/".$_FILES['soubor1']['name']);

// uspořádáme potřebné údaje do jednoho pole
$soubor[0]["file"] = "./temp/".$_FILES['soubor1']['name'];
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// řádek s content_type je NAPROSTO KLÍČOVÝ pro úspěšné odeslání mailu!!!
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$soubor[0]["content_type"] = $_FILES['soubor1']['type'];

}

// pokud máte jen jeden soubor, následující podmínku odmažte
if(isset($_FILES['soubor2']['tmp_name']) AND is_uploaded_file($_FILES['soubor2']['tmp_name'])){

move_uploaded_file($_FILES['soubor2']['tmp_name'],"./temp/".$_FILES['soubor2']['name']);
$soubor[1]["file"] = "./temp/".$_FILES['soubor2']['name'];
$soubor[1]["content_type"] = $_FILES['soubor2']['type'];

}

// a nakonec opět odešleme s tím rozdílem, že nakonec přidáme uspořádané pole...
if(posli_email("Frank","polesny@email.cz","Jmeno adresata","adresat@domena.tld","Predmet mailu","Zpráva psaná v plain textu...",$soubor)){
echo "Mail odeslán";
}else{
echo "Mail neodeslán";
}
?>

  « Zpět na předchozí stránku
« Copyright © 2002 - 2017  Honza Petr | Reklama - Kontakt | Připojeno přes Kraja.cz | [ochrana osobních údajů] | RSS | Mapa webu »
Partneři: | Parabola | Povinné ručení | půjčky bez potvrzení příjmu Domény a webhosting půjčky bez registru inzeráty zdarma | hosting