Odeslání emailu s přílohou
Upozornění: Tento návod je už hodně starý. Pokud řešíte posílání emailů pomocí PHP, doporučuji využít některou z dostupných knihoven,např. PHPMailer.
Nedávno jsem potřeboval napsat skript, který by dokázal odeslat email i s přílohou. Po chvíli hledání na internetu jsem našel následující skript. Na začátku je obsah přílohy načten do proměnné $contents, tato proměnná je poté zakódavaná pomocí MIME-kódování BASE64, které vytvoří řetězec vhodný pro odeslání emailem. Po zakódování je vzniklý řetězec rozdělen na menší pomocí funkce Chunk_Split() . Rozdělení řetězce je nutné provést proto, aby vyhovoval standardu RFC 2045. Dál jsou definovány hlavičky a tělo zprávy.
Nakonec je vše předáno funkci mail, která mail odešle.
<?php
//NACTENI SOUBORU DO PROMENNE A ZAKODOVANI POMOCI MIME BASE64
$attachment_name = 'priloha.pdf';
$fp = FOpen ($attachment_name, 'r');
$contents = FRead ($fp, FileSize($attachment_name));
$contents = Chunk_Split(Base64_Encode($contents));
FClose ($fp);
$address = 'email@neco.cz';
$subject = 'Email s prilohou';
$headers = "From: Odesilatel <email.odesilatele@neco.cz>\n";
$headers .= "Reply-To: <email.odesilatele@neco.cz>\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/related; type=\"multipart/alternative\"; boundary=\""
."----=MIME_BOUNDRY_main_message\"\n";
$headers .= "X-Sender: Odesilatel <email.odesilatele@neco.cz>\n";
$headers .= "X-Mailer: PHP4\n";
$headers .= "X-Priority: 3\n"; //Priorita emailu 1 = Urgentni, 3 = Normalni
$headers .= "Return-Path: <email.odesilatele@neco.cz>\n";
$headers .= "This is a multi-part message in MIME format.\n";
$headers .= "------=MIME_BOUNDRY_main_message \n";
$headers .= "Content-Type: multipart/alternative; boundary=\""
."----=MIME_BOUNDRY_message_parts\"\n";
$message = "------=MIME_BOUNDRY_message_parts\n";
$message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n";
$message .= "\n";
$message .= "\n";
$message .= "\n";
$message .= "------=MIME_BOUNDRY_message_parts--\n";
$message .= "SEM MUZETE ZADAT TEXT EMAILU\n";
$message .= "------=MIME_BOUNDRY_main_message\n";
$message .= "Content-Type: application/octet-stream;\n\tname=\"" . $attachment_name . "\"\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "Content-Disposition: attachment;\n\tfilename=\"" . $attachment_name . "\"\n\n";
$message .= $contents; //Zakodovana priloha
$message .= "\n";
$message .= "------=MIME_BOUNDRY_main_message--\n";
//ODESLANI EMAILU
if (mail($address, $subject, $message, $headers))
{
print 'Email byl úspěšně odeslán.';
}
else
{
print 'Došlo k chybě!';
}
?>
Použité funkce
BASE64_Encode, Chunk_Split, FClose, FileSize, FOpen, FRead, MailLICENCE
Všechny skripty na tomto webu jsou poskytovány, pokud není uvedeno jinak, bez jakýchkoliv licenčních požadavků a také bez záruk.