PHP meil s přílohou...

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

PHP meil s přílohou...

Příspěvek od Václav Sedlář »

Dobrý den, potřebuji v php udělat odesílání meilu s přílohou (pdf)...našel jsem si návod zde: http://www.builder.cz/art/web/emailsprilohou.html

ale bohužel to nefunguje-při pokusu o odeslání mi to vytíží procesor na 50% a zablokuje php (vertrigoserv), takže ho musím restartovat...

Normální odeslání meilu bez přílohy funguje...

Jediný co jsem v návodu změnil bylo pevné nadefinování mime a odstraněny některé podmínky...níže dávám kod:

Toto nefunguje:

Kód: Vybrat vše


function poslatMeil($from,$to,$subject,$zprava,$attach){

$header = "From: $from\n"; 
 $header .= "MIME-version: 1.0\n"; 
 $header .= "X-Mailer: PHP\n"; 
 $header .= "Return-Path: <$from>\n"; 
 $header .= "Reply-To: $from\n";  

 
 
 $real_name = "pozvanka.pdf"; 
 

 // zjištění mime typu vznikající přílohy 
 $type = 'application/pdf'; 

 // načteme přílohu 
 $f = fopen ($attach,"r"); 
 if (!$f) { 
 exit("Nelze otevrit prilohu - koncime"); 
 } 

 $attach_obsah = fread ($f,filesize ($attach)); 

 // překódujeme obsah přílohy do base64, je vhodné použít i fci chunk 
 $attach_obsah = chunk_split (base64_encode ($attach_obsah)); 

 fclose ($f); 

 // připravíme hlavičky (příloha bude přímo v nich)!!! 

 // vygenerování boundary (hranice), musí to být řetězec, který se nebude 
 // vyskytovat nikde v textu. Dále vytvoříme úvod mailu, v kterém 
 // určujeme, že mail má více částí vzájemně oddělených pomocí boundary 

 $boundary = strtoupper(md5(uniqid("bound_"))); 
 $header .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\n\n";
 $header .= "This is a multi-part message in MIME format.\n\n"; 

 // hranicí oddělíme úvod 
 $header .= "--" . $boundary . "\n"; 

 // první část mailu obsahuje běžné tělo mailu, zakódované 
 $header .= "Content-Type: text/plain; charset=\"utf-8\"\n"; 
 $header .= "Content-Transfer-Encoding: base64\n\n"; 
 $header .= base64_encode($body) . "\n\n"; 

 // hranicí určíme, že následuje další část emailu 
 $header .= "--" . $boundary . "\n"; 

 // dalsi cast mailu - přidáme hlavičky na kódování, mime a přílohu 
 $header .= "Content-Type: " . $type . "\n"; 
 $header .= "Content-Transfer-Encoding: base64\n"; 
 $header .= "Content-Disposition: attachment; filename=\"$real_name\"\n\n";
 $header .= $attach_obsah . "\n\n"; 
 $predmet = "=?utf-8?B?".base64_encode($predmet)."?=";
 // hranicí ukončíme mail (na konci ještě musí být --) 
 $header .= "--" . $boundary . "--"; 
  mail ($to,$predmet,"",$header);

}
Moc prosím o pomoc...díky...
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: PHP meil s přílohou...

Příspěvek od Václav Sedlář »

AHA, už to funguje...zachránilo mě toto:

http://www.z-moravec.net/php_learn/lib/ ... chment.php

Snad je ten postup bezpečný/ne moc zastaralý...
TomTom
Začátečník
Začátečník
Registrován: 02. úno 2006
Bydliště: KönigGratz

Re: PHP meil s přílohou...

Příspěvek od TomTom »

Mno nevim, nebude lepší na to použít třeba PHPmailer?
http://code.google.com/a/apache-extras.org/p/phpmailer/
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: PHP meil s přílohou...

Příspěvek od Václav Sedlář »

to jsem zapomněl říct...je to možné použít, ale chtěl jsem zkusit implementovat vlastní fci...
arxeiss
Začátečník
Začátečník
Uživatelský avatar
Registrován: 19. črc 2008
Bydliště: Krmelín (předměstí Ostravy)
Kontaktovat uživatele:

Re: PHP meil s přílohou...

Příspěvek od arxeiss »

PHPMailer je super, zkoušel jsem si ho pročíst, a řeší tam opravdu tolik věcí, že to je šílené, po té co jsem si pročetl zdrojáky Maileru vím, že psát svoje opravdu nemá cenu, jenom si tím přihoršíš...
PC : CPU: C2D E5200 2500Mhz @ 3750Mhz a AC Freezer 7PRO MB: Gigabyte GA-P31-DS3L rev.2,1 GPU: ATI Radeon 3650HD 256MB RAM: A-Data Vitesta 2x2GB Zdroj: Forton OEM 400W HDD: Samsung F2 500GB
Netbook : Asus EEE CPU: Intel Atom N270 1,6GHz RAM: A-Data 2GB HDD: 250GB 5400ot/min
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Problém s meilem a přílohou - php

Příspěvek od Václav Sedlář »

Dobrý den, mám v php vlastní funkci pro odesílání meilu s přílohou...

Funkce funguje dobře-příloha na meily chodí, ale když pošlu meil s přílohou na můj druhý PC, který je připojen přes jinýho poskytovatele netu, tak zpráva dorazí bez přílohy...

Když např. cílová adresa je xxx@seznam.cz, tak když se podívám do schránky na seznamu, tak tam ta příloha ještě je, ale jakmile přes pop stáhnu meil do thunderbirdu, tak už je to bez přílohy...

Nevím proč to dělá- když to posílám na jiné meily (i přes toho problematického poskytovatele), tak příloha příjde všem, ale jakmile se ten meil stahuje přes tohoto konkrétního poskytovatele, tak to odfiltruje přílohu...

Napadá mě, že se mu třeba nelíbí moje hlavičky, tak uvádím celou mojí funkci v php:

Kód: Vybrat vše


function poslatMeil($from,$to,$subject,$zprava,$attachment_name){
    if($_SESSION['prihlasen']==1){
      if($attachment_name!=""){
        if($attachment_name[strlen($attachment_name)-5]=='a'){
          $attachment_name2="pozvanka.pdf"; 
        }else{
          $attachment_name2="oznameni.pdf"; 
        }
      
        $fp = FOpen ($attachment_name, 'r'); 
        $contents = FRead ($fp, FileSize($attachment_name)); 
        $contents = Chunk_Split(Base64_Encode($contents)); 
        FClose ($fp); 
     
        //$subject = 'Email s prilohou'; 
  
        $headers = "From: ".$from."\n";  
        $headers .= "Reply-To: <".$from.">\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 <".$from.">\n"; 
        $headers .= "X-Mailer: PHP4\n"; 
        $headers .= "X-Priority: 3\n"; //Priorita emailu 1 = Urgentni, 3 = Normalni 
        $headers .= "Return-Path: <".$from.">\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=\"utf-8\"\n"; 
        $message .= "Content-Transfer-Encoding: quoted-printable\n"; 
        $message .= "\n"; 
        $message .= "\n"; 
        $message .= $zprava."\n"; 
        $message .= "------=MIME_BOUNDRY_message_parts--\n"; 
        $message .= "\n"; 
        $message .= "------=MIME_BOUNDRY_main_message\n"; 
        $message .= "Content-Type: application/pdf;\n\tname=\"" . $attachment_name . "\"\n"; 
        $message .= "Content-Transfer-Encoding: base64\n"; 
        $message .= "Content-Disposition: attachment;\n\tfilename=\"" . $attachment_name2 . "\"\n\n"; 
        $message .= $contents; //Zakodovana priloha 
        $message .= "\n"; 
        $message .= "------=MIME_BOUNDRY_main_message--\n";
            
        mail($to, $subject, $message, $headers);
    
      }else{
        $hlavicka = "MIME-Version: 1.0\n";
        $hlavicka .= "Content-type: text/html; charset=utf-8\n";
        $hlavicka .= "Content-Transfer-Encoding: base64\n";
        $hlavicka .= "From: ".$from."\n"; 
        $predmet=$subject;
        $predmet = "=?utf-8?B?".base64_encode($predmet)."?=";
        $zprava64 = base64_encode($zprava); 
        mail($to,$predmet,$zprava64,$hlavicka);  
      }
    }                                        
  }


děkuji za pomoc


// OndraSter - sloučeno
Smith
Pokročilý
Pokročilý
Uživatelský avatar
Registrován: 11. úno 2004
Bydliště: někde u UH
Kontaktovat uživatele:

Re: PHP meil s přílohou...

Příspěvek od Smith »

Proč vymyšlet kolo, když je tu phpmailer a frameworky?
# Desktop [Ryzen 9 7950X, 128 GB RAM, GeForce GTX 1660 Ti, 4x SSD, 3x Dell UP2716D(A), W11 Pro]
# Notebook Dell XPS 13 [i7-7500U, 16 GB RAM, 512 GB SSD, W11 Pro], Apple MacBook Air 13" [M2, 16 GB RAM, 512 GB SSD]
# Home Server [2x E5-2630 v3, 128 GB RAM, WS2019] # Storage Synology DS1815+ [24 TB RAID6], Synology DS1819+ [24 TB RAID6, 10 GbE]
# Samsung Galaxy S23 Ultra # Canon EOS R5, Canon EOS 3, Canonet QL17 G-III, Bronica SQ-A # www.photosmith.cz
Václav Sedlář
Žlutá karta Bazar
Žlutá karta Bazar
Registrován: 01. dub 2006
Bydliště: Liberec
Kontaktovat uživatele:

Re: PHP meil s přílohou...

Příspěvek od Václav Sedlář »

no do teď to fungovalo dobře...ale čekal jsem tuto odpověď...takže jsem stáhl php mailer a hází mi chybu-nějaký problém s třídou na řádku kde mu vkládám adresu příjemce...večer sem dám výpis chyby...
Odpovědět

Zpět na „Programování a web“