ELEKTRO
CHEMIE
PROGRAMOVÁNÍ
FOTKY
BLOG
E-SHOP

Elektro

  • Novinky
  • Aktuality
  • PHP
  • MySQL
  • JavaScript
  • .NET
  • Download
  • Odkazy
  • Anketa
  • Návštěvní kniha
  • Mapa webu
  • O webu
  • RSS

  • © by Hugo moravec.zd@gmail.com

    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 ($fpFileSize($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, Mail

    LICENCE

    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.