Autor Zpráva
milan
Profil *
Přeji pěkný den,
zkouším níže uvedený script na odesílání e-mailu s přílohou. Mám dva problémy:
1.) Do e-mailu mi sice přijde příloha ale má název část1 a jako přípona je 1.
2.) Do e-mailu mi nepřijde žádný text z vyplněných polí.

Chtěl bych poprosit, zda nevíte kde by mohla být chyba, děkuji Milan

                  
  $soubor_name = $_FILES["soubor"]["name"];
  $soubor = $_FILES["soubor"]["tmp_name"];
  
  if ($soubor_name == "") { /* nebyla vybrana priloha, posleme e-mail obycejne */
  
  // funkce mail odeslání ne e-mail    
  mail("$komu","$predmet","$telo","$header");
         
    }
    else { /* priloha byla vybrana */
        /* nejprve sestrojime hlavicky */
        
        $envelope["from"] = "$odesilatel";
        $envelope["to"] = "$prijemce";
        
        /* nyni sestrojime nekolik casti dopisu */
        /* 1. cast - uvodni, tou rekneme, ze dopis ma vice casti s ruznymi typy dat */
        
        $part1["type"] = TYPEMULTIPART;
        $part1["subtype"] = "mixed";
        
        /* 2. cast - do dopisu pripojime prilohu */
        /* nejprve zadany soubor nacteme */
        
        Copy($soubor, $soubor_name); /* uploadnuty soubor zkopirujeme z docasneho adresare */
        
        $f = fopen ($soubor_name, "r"); /* otevren pro cteni */
        $obsah = fread ($f, filesize($soubor_name)); /* nacteme obsah do promenne */
        fclose ($f);
        
        $part2["type"] = TYPEAPPLICATION;
        $part2["encoding"] = ENCBINARY;
        $part2["subtype"] = "octet-stream";
        $part2["description"] = basename($soubor_name);
        $part2["contents.data"] = "$obsah";
        
        /* 3. cast - do dopisu vlozime zadany text */
        $part3["type"] = TYPETEXT;
        $part3["subtype"] = "plain";
        $part3["description"] = "text";
        $part3["contents.data"] = $dopis;
        
        /* Cely dopis ulozime do pole body */
        $body[1] = $part1;
        $body[2] = $part2;
        $body[3] = $part3;
        
        /* celou zpravu vytvorime a ulozime do promenne $zprava: */
        $zprava = imap_mail_compose ($envelope, $body);
        
        /* drive nez posleme zpravu funkci Mail musime rozdelit 
           zvlast hlavicku a zvlast telo: */
        
        $pom = StrPos($zprava, "\r\n\r\n");
        $hlavicka = SubStr($zprava, 0, $pom+2);
        $teloSoubor = SubStr($zprava, $pom, StrLen($zprava) - $pom);
                  
        if (mail ("$prijemce", 'Zpráva z webu', $teloSoubor, $hlavicka)) {
            
        
      print "<h3>E-mail byl úspěšně odeslán!</h3>";
        }
        else {
            print "<h3>E-mail se nepodařilo odeslat!</h3>";
        }
    
  
  }                
                  
          
juriad
Profil
milan:
Proč nepoužiješ knihovnu PHPMailer, která toto a mnoho dalšího už umí?

1. problém:
Nejsem si jistý. Zkusil jsi si vypsat, co je výsledkem basename($soubor_name)?

2. problém:
Používáš proměnnou $dopis, ale v případě bez přílohy je to proměnná $telo.

Mimochodem, není dobré posílat vše jako application/octet-stream, protože pak s tím mailový klient nemůže nic dělat (nemůže ukázat náhled ani nabídnout otevřít v konkrétní aplikaci).
Kopírování souboru jen proto abys jej přečetl je zbytečné; můžeš jej přečíst rovnou v tempu.
milan
Profil *
juriad:
Děkuji za odpověď, mohl bych poprosit o stručný popis jak phpmailer zprovoznit na svém serveru?

Moc díky Milan
juriad
Profil
milan:
Stáhneš si ten ZIP, ten si někam na serveru rozbalíš (třeba do adresáře PHPMailer). Pak ve svém skriptu (jako je naznačeno v Simpe Example) requirneš ten soubor PHPMailerAutoload.php (budeš muset zadat správnou cestu, tedy asi něco jako:
require "PHPMailer/PHPMailerAutoload.php";
Pak si jen upravíš tu ukázku.
milan
Profil *
juriad:
OK díky, jdu to zkusit

Pěkný den, Milan

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: