Autor Zpráva
RobertH
Profil
Zdravim,

mam problem pri odesilani formulare, kod nize mi ho zpracovava a odesila na email.
Problem zpociva v tom, ze kdyz odeslu formular s prilohou, tak mi pride email z vyplnene adresy ve formulari (tak jak ma), ale kdyz je bez prilohy tak mi prijde z postmastru a ne z vyplneneho emailu.

Nemuzu najit chybu, dokazal by mi s tim nekdo pomoct?
RobertH
Profil
<?php
  
    $p = strlen($extension); 
    if($p != 4 && $p != 5) { 
        $valid = 0; 
        $err_msg .= "<p>Priloha ma prilis dlouhy nazev.$p"; 
    } 
    if($valid == 1){ 
        $fileatt = $_FILES['fileatt']['tmp_name']; 
        $hlavicka = "From: $email"; 
        if(is_uploaded_file($fileatt)) { 
          $file = fopen($fileatt,'rb'); 
          $data = fread($file,filesize($fileatt)); 
          fclose($file); 
          $semi_rand = md5(time()); 
          $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
          $hlavicka .= "\nMIME-Version: 1.0\n" . 
                      "Content-Type: multipart/mixed;\n" . 
                      " boundary=\"{$mime_boundary}\""; 
          $zprava = "This is a multi-part message in MIME format.\n\n" . 
                     "--{$mime_boundary}\n" . 
                     "Content-Type: text/html; charset=$chrset\n" . 
                     "Content-Transfer-Encoding: 7bit\n\n" . 
                     $zprava . "\n\n"; 
          $data = chunk_split(base64_encode($data)); 
          $zprava .= "--{$mime_boundary}\n" . 
                      "Content-Type: {$file_type};\n" . 
                      " name=\"{$file_name}\"\n" . 
                      "Content-Transfer-Encoding: base64\n\n" . 
                      $data . "\n\n" . 
                      "--{$mime_boundary}--\n"; 
        } 
		if ($stop != 1){
		     $zprava = StripSlashes($zprava); 
		     $sent = @mail($emailadr, $predmet, $zprava, $hlavicka); 
 		    if($sent) header("Location: ../../../index.php?page=razitka_objednavka_potvrzeni");
 		    else      echo "<h1>Formular se nezdrilo odeslat.</h1>"; 
		}
		else {
		   header("Location: ../../../index.php?page=razitka_objednavka_alert");
} 
    if($valid!==1) { 
        echo "<h2>Chyba...</h2>$err_msg"; 
        echo "<p>Kliknete zpet a zkuste znovu."; 
    } 
} 
else { // není příloha 
		if ($stop != 1){
		     $zprava = StripSlashes($zprava); 
		     $sent = @mail($emailadr, $predmet, $zprava, $hlavicka); 
 		    if($sent) header("Location: ../../../index.php?page=razitka_objednavka_potvrzeni");
 		    else      echo "<h1>Formular se nezdrilo odeslat.</h1>"; 
		}
		else {
		   header("Location: ../../../index.php?page=razitka_objednavka_alert");
} 
} 
?> 
AM_
Profil
Opravdu ten problém nešlo redukovat na méně řádků? Tímhle se nikomu nebude chtít probírat, zato ty bys mohl skript "osekat" tak, aby pořád docházelo ke zmiňované chybě, ale měl třeba jen 10 řádků. Víc nás nezajímá.
//jako například dlouhé výpisy HTML kódu, dlouhé seznamy těch položek formuláře, se kterými to nesouvisí, nebo seznam mime typů, popř. hromada validace v PHP atd., která s problémem také nesouvisí.
nightfish
Profil
vzhledem k tomu, že adresu odesílatele (hlavičku From) nastavujete jen na řádku 46 v [#2], který je ve větvi začínající
if($att_present) {
, není se čemu divit

jinak budete mít rozhozené kódování v předmětu, ale to už asi víte
RobertH
Profil
AM:
zkráceno...

nightfish:
a kde to mám ještě nastavit aby se mi to odesílalo z emailu odesílatele?

Kódování je špatné pouze v Outlooku, můžu se zeptat čím to je? Když mám nastavené všude UTF-8.
nightfish
Profil
RobertH:
a kde to mám ještě nastavit aby se mi to odesílalo z emailu odesílatele?
řádek 10 z [#2] nakopírujte na před řádek 50 z [#2]

Kódování je špatné pouze v Outlooku, můžu se zeptat čím to je?
protože předmět se musí kódovat zvlášť (protože se posílá v hlavičkách)
více je to popsané ve FAQ
RobertH
Profil
Takze bude vypadat ten kod takhle?

<?php
else { // není příloha 
        if ($stop != 1){
             $zprava = StripSlashes($zprava); 
         $hlavicka = "From: $email"; 
             $sent = @mail($emailadr, $predmet, $zprava, $hlavicka); 
             if($sent) header("Location: ../../../index.php?page=razitka_objednavka_potvrzeni");
             else      echo "<h1>Formular se nezdrilo odeslat.</h1>"; 
        }
        else {
           header("Location: ../../../index.php?page=razitka_objednavka_alert");
} 
} 
?> 
RobertH
Profil
tak takhle mi to nefunguje, sice mi to prijde z odesilajiciho emailu, ale zato ne v html, ale rozsypany
nightfish
Profil
pravděpodobně už $hlavicka něco obsahuje (což se ze zkráceného [#2] zjistit nedá)
zkuste řádek 5 nahradit za
$hlavicka .= "From: $email\r\n";
RobertH
Profil
Super... už to funguje jak má. Díky

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:

0