Jump to content
Sign in to follow this  
Gnappoide

Script formmail con allegato funzionante solo su altervista

Recommended Posts

Ciao a tutti, ho un piccolo problema con uno script in php per mandare email con un allegato.

Su altervista la cosa funziona, mi arrivano gli allegati integri, mentre, con il nuovo hosting mi arrivano allegati danneggiati, ovvero che pesano 0kb....

Non so se è un problema di codice perchè su un hosting funziona tutto bene sull'altro no.

 

Sotto posto il codice, non pretendo che ve lo leggiate, più che altro mi basta un consiglio su cosa vedere di sistemare o fare ;)

 

 

function get_ext($key) { 
   $key=strtolower(substr(strrchr($key, "."), 1));
   // Cause there the same right?
   $key=str_replace("jpeg","jpg",$key);
   return $key;
}

function phattach($file,$name) {
   global $boundary;

   $fp=@fopen($file,"r");
   $str=@fread($fp, filesize($file));
   $str=@chunk_split(base64_encode($str));
   $message="--".$boundary."\n";
   $message.="Content-Type: application/octet-stream; name=\"".$name."\"\n";
   //$message.="Content-disposition: attachment\n"; Thanks goes to someone named Chris (I think, it was awhile ago) for his fix below!
   $message.="Content-disposition: attachment; filename=\"".$name."\"\n"; 
   $message.="Content-Transfer-Encoding: base64\n";
   $message.="\n";
   $message.="$str\n";
   $message.="\n";

   return $message;
}

//Little bit of security from people forging headers. People are mean sometimes :(
function clean($key) {
   $key=str_replace("\r", "", $key);
   $key=str_replace("\n", "", $key);
   $find=array(
       "/bcc\:/i",
       "/Content\-Type\:/i",
       "/Mime\-Type\:/i",
       "/cc\:/i",
       "/to\:/i"
   );
 $key=preg_replace($find,"",$key);
 return $key;
}

// Safe for register_globals=on =)

$error="";
$types="";
$sent_mail=false;

// Do some loopy stuff for the valid file types so people can see what types are valid before they try and upload invalid ones.

$ext_count=count($allowtypes);
$i=0;

foreach($allowtypes AS $extension) {

   //Gets rid of the last comma

   If($i <= $ext_count-2) {
       $types .="*.".$extension.", ";
   } Else {
       $types .="*.".$extension;
   }
   $i++;
}
unset($i,$ext_count); // why not


// If they post the form start the mailin'!

If($_POST['submit']==true) {
   extract($_POST, EXTR_SKIP);

       // Check the form for errors

       If(trim($yourname)=="") { 
           $error.="Non hai inserito il tuo nome e cognome.<br />";
       }

       If(trim($youremail)=="") { 
           $error.="Non hai inserito il tuo indirizzo email.<br />";
       } Elseif(!eregi("^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,4}\$",$youremail)) {
           $error.="Invalid email address.<br />";
       }

       If(trim($emailsubject)=="") {
           $emailsubject=$defaultsubject;
       }

       If(trim($yourmessage)=="") { 
           $error.="Non hai inserito un messaggio.<br />";
       }

       // Verify Attachment info

       If($allowattach > 0) {

           //Loopish

           For($i=0; $i <= $allowattach-1; $i++) {

               If($_FILES['attachment']['name'][$i]) {

                   $ext=get_ext($_FILES['attachment']['name'][$i]);
                   $size=$_FILES['attachment']['size'][$i];
                   $max_bytes=$max_file_size*1024;

                   //Check if the file type uploaded is a valid file type. 

                   If(!in_array($ext, $allowtypes)) {

                       $error.= "Estensione del file allegato non valida: ".$_FILES['attachment']['name'][$i].", puoi allegare solo files in ".$types." Grazie.<br />";

                       //Check the size of each file

                   } Elseif($size > $max_bytes) {
                       $error.= "Il tuo: ".$_FILES['attachment']['name'][$i]." è troppo grande. Puoi allegare files grandi al massimo ".$max_file_size."kb.<br />";
                   }

               } // If Files

           } // For

           //Tally the size of all the files uploaded, check if it's over the ammount.

             $total_size=array_sum($_FILES['attachment']['size']);

           $max_file_total_bytes=$max_file_total*1024;

           If($total_size > $max_file_total_bytes) {
               $error.="Puoi allegare files grandi al massimo ".$max_file_total."kb<br />";
           }

       } // If Allowattach

   If($error) {

       $display_message=$error;

   } Else {

       If($use_subject_drop AND is_array($subjects) AND is_array($emails)) {
           $subject_count=count($subjects);
           $email_count=count($emails);

           If($subject_count==$email_count) {

               $myemail=$emails[$emailsubject];
               $emailsubject=$subjects[$emailsubject];

           }

       }


       $boundary=md5(uniqid(time()));

       //Little bit of security from people forging headers. People are mean sometimes :(

       $yourname=clean($yourname);
       $yourmessage=clean($yourmessage);
       $youremail=clean($youremail);

       //Headers

       $headers="From: ".$yourname." <".$youremail.">\n";
       $headers.="Reply-To: ".$yourname." <".$youremail.">\n";
       $headers.="MIME-Version: 1.0\n";
       $headers.="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
       $headers.="X-Sender: ".$_SERVER['REMOTE_ADDR']."\n";
       $headers.="X-Mailer: PHP/".phpversion()."\n";
       $headers.="X-Priority: ".$priority."\n"; 
       $headers.="Return-Path: <".$youremail.">\n";
       $headers.="This is a multi-part message in MIME format.\n";

       //Message

       $message = "--".$boundary."\n";
       $message.="Content-Type: text/plain; charset=\"iso-8859-1\"\n";
       $message.="Content-Transfer-Encoding: quoted-printable\n";
       $message.="\n";
       $message.="$yourmessage";
       $message.="\n";

       //Lets attach to something! =)

       If($allowattach > 0) {

           For($i=0; $i <= $allowattach-1; $i++) {

               If($_FILES['attachment']['name'][$i]) {

                   $message.=phattach($_FILES['attachment']['tmp_name'][$i],$_FILES['attachment']['name'][$i]);

               }

           } //For

       } // If


       // End the message

       $message.="--".$boundary."--\n";

       // Send the completed message

       If(!mail($myemail,$emailsubject,$message,$headers)) {

           Exit("Attenzione, è avvenuto un errore. \n");

       } Else {

           $sent_mail=true;

       }

   } // Else

} // $_POST

Share this post


Link to post
Share on other sites

boh.. allora potrebbe essere altrove l'inghippo (hai postato tutto il codice?) magari nella configurazione dei server dell'hosting... è capitato anche a me che passando da un hosting all'altro alcune cose che prima andavano,dopo non andavano + e mi son dovuto scervellare x capire dove.. (nel mio caso una versione diversa di php)

Share this post


Link to post
Share on other sites

Si il codice sostanzialmente è tutto.

Mancano due o tre cazzatine, che di sicuro non c'entrano con l'invio dell'allegato.

Dici che possa essere una diversa configurazione del server nuovo?

Effettivamente non c'ho pensato... solo che mi scoccia aprire un ticket per un problema del genere..

 

Grazie per l'aiuto ;)

Share this post


Link to post
Share on other sites

se su altervista funziona,a livello di codice è tutto apposto.. tuttavia ci sono alcune sottili differenze se la versione di php è diversa o peggio,se la config del server è differente (in questo caso non ci puoi far nulla mi sa)

 

magari se risolvi,scrivilo che sono curioso di sapere cos'era :)

Share this post


Link to post
Share on other sites

Cambio genere di richiesta :D

Qualcuno mi può suggerire un buon script per inviare mail che abbia:

 

- controllo dei campi

- controllo validità indirizzo email

- possibilità allegare 1 file

- possibilità di mettere un limite alla grandezza dell'allegato

- possibilità di autorizzare l'invio di file con determinate estensioni

 

ah il tutto di facile configurazione :D

 

Spero di non chiedere la luna :D

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

×