Problema invio allegati via mail con libero

Luca.Colonnello

Nuovo Utente
31 Mar 2011
4
0
0
Ciao a tutti sono nuovo di quì! Complimenti per il forum è molto comodo.

Io ho il seguente problema con l'invio di mail tramite php.

Ho creato una classe per l'invio che prevede anche l'invio di allegati.
La funzione interessata è _addAttech($messaggio,$attech), ho postato tutto lo stesso se dovesse servire.

Su libero mail non si vede l'allegato non è nemmeno segnalato (solo visibile che è presente un allegato nella lista, ma aprendo l'email non c'è nessun allegato).
In libero mail versione classica invece mi compare come allegato BodyPart.txt

Vi chiedo di esaminare solo quella funzione (se necessario in base al codice intorno), ne avrei davvero bisogno! GRAZIE IN ANTICIPO


PHP:
 <?php
 /**
  *****************************************************
  *                PHP MAILER CLASS                     
  *****************************************************
  * @Author:         Luca Colonnello
  * @Email:          [email protected]
  * @Date:           01/02/2011
  *****************************************************
  * @Description:    Classe per l'invio di mail html 
  *                  e testuale con allegati.
  *****************************************************
  * @Example:
  *
    require_once("mailsender.class.php");
  
    $m_s=new mailsender("[email protected]", "Luca Colonnello", null, null);
    $c="<html>
         <body>
           <b style=\"color:red;\">CIAO DA LUCA</b> 
         </body>
        </html>";
    $r=$m_s->sendmail("[email protected]",null,"Prima mail prova",$c,null);
    echo $r;
  *	
  **/
  

class mailsender
{
 public $sender="";
 public $mailer="";
 public $boundary1="";
 public $boundary2="";
 public $startTPL="<html><head></head><body>";
 public $endTPL="</body></html>";
 
 
 //MIME Types List Array
 public $mime_types = array("323" => "text/h323",
 "acx" => "application/internet-property-stream",
 "ai" => "application/postscript",
 "aif" => "audio/x-aiff",
 "aifc" => "audio/x-aiff",
 "aiff" => "audio/x-aiff",
 "asf" => "video/x-ms-asf",
 "asr" => "video/x-ms-asf",
 "asx" => "video/x-ms-asf",
 "au" => "audio/basic",
 "avi" => "video/x-msvideo",
 "axs" => "application/olescript",
 "bas" => "text/plain",
 "bcpio" => "application/x-bcpio",
 "bin" => "application/octet-stream",
 "bmp" => "image/bmp",
 "c" => "text/plain",
 "cat" => "application/vnd.ms-pkiseccat",
 "cdf" => "application/x-cdf",
 "cer" => "application/x-x509-ca-cert",
 "class" => "application/octet-stream",
 "clp" => "application/x-msclip",
 "cmx" => "image/x-cmx",
 "cod" => "image/cis-cod",
 "cpio" => "application/x-cpio",
 "crd" => "application/x-mscardfile",
 "crl" => "application/pkix-crl",
 "crt" => "application/x-x509-ca-cert",
 "csh" => "application/x-csh",
 "css" => "text/css",
 "dcr" => "application/x-director",
 "der" => "application/x-x509-ca-cert",
 "dir" => "application/x-director",
 "dll" => "application/x-msdownload",
 "dms" => "application/octet-stream",
 "doc" => "application/msword",
 "dot" => "application/msword",
 "dvi" => "application/x-dvi",
 "dxr" => "application/x-director",
 "eps" => "application/postscript",
 "etx" => "text/x-setext",
 "evy" => "application/envoy",
 "exe" => "application/octet-stream",
 "fif" => "application/fractals",
 "flr" => "x-world/x-vrml",
 "gif" => "image/gif",
 "gtar" => "application/x-gtar",
 "gz" => "application/x-gzip",
 "h" => "text/plain",
 "hdf" => "application/x-hdf",
 "hlp" => "application/winhlp",
 "hqx" => "application/mac-binhex40",
 "hta" => "application/hta",
 "htc" => "text/x-component",
 "htm" => "text/html",
 "html" => "text/html",
 "htt" => "text/webviewhtml",
 "ico" => "image/x-icon",
 "ief" => "image/ief",
 "iii" => "application/x-iphone",
 "ins" => "application/x-internet-signup",
 "isp" => "application/x-internet-signup",
 "jfif" => "image/pipeg",
 "jpe" => "image/jpeg",
 "jpeg" => "image/jpeg",
 "jpg" => "image/jpeg",
 "js" => "application/x-javascript",
 "latex" => "application/x-latex",
 "lha" => "application/octet-stream",
 "lsf" => "video/x-la-asf",
 "lsx" => "video/x-la-asf",
 "lzh" => "application/octet-stream",
 "m13" => "application/x-msmediaview",
 "m14" => "application/x-msmediaview",
 "m3u" => "audio/x-mpegurl",
 "man" => "application/x-troff-man",
 "mdb" => "application/x-msaccess",
 "me" => "application/x-troff-me",
 "mht" => "message/rfc822",
 "mhtml" => "message/rfc822",
 "mid" => "audio/mid",
 "mny" => "application/x-msmoney",
 "mov" => "video/quicktime",
 "movie" => "video/x-sgi-movie",
 "mp2" => "video/mpeg",
 "mp3" => "audio/mpeg",
 "mpa" => "video/mpeg",
 "mpe" => "video/mpeg",
 "mpeg" => "video/mpeg",
 "mpg" => "video/mpeg",
 "mpp" => "application/vnd.ms-project",
 "mpv2" => "video/mpeg",
 "ms" => "application/x-troff-ms",
 "mvb" => "application/x-msmediaview",
 "nws" => "message/rfc822",
 "oda" => "application/oda",
 "p10" => "application/pkcs10",
 "p12" => "application/x-pkcs12",
 "p7b" => "application/x-pkcs7-certificates",
 "p7c" => "application/x-pkcs7-mime",
 "p7m" => "application/x-pkcs7-mime",
 "p7r" => "application/x-pkcs7-certreqresp",
 "p7s" => "application/x-pkcs7-signature",
 "pbm" => "image/x-portable-bitmap",
 "pdf" => "application/pdf",
 "pfx" => "application/x-pkcs12",
 "pgm" => "image/x-portable-graymap",
 "pko" => "application/ynd.ms-pkipko",
 "pma" => "application/x-perfmon",
 "pmc" => "application/x-perfmon",
 "pml" => "application/x-perfmon",
 "pmr" => "application/x-perfmon",
 "pmw" => "application/x-perfmon",
 "pnm" => "image/x-portable-anymap",
 "pot" => "application/vnd.ms-powerpoint",
 "ppm" => "image/x-portable-pixmap",
 "pps" => "application/vnd.ms-powerpoint",
 "ppt" => "application/vnd.ms-powerpoint",
 "prf" => "application/pics-rules",
 "ps" => "application/postscript",
 "pub" => "application/x-mspublisher",
 "qt" => "video/quicktime",
 "ra" => "audio/x-pn-realaudio",
 "ram" => "audio/x-pn-realaudio",
 "ras" => "image/x-cmu-raster",
 "rgb" => "image/x-rgb",
 "rmi" => "audio/mid",
 "roff" => "application/x-troff",
 "rtf" => "application/rtf",
 "rtx" => "text/richtext",
 "scd" => "application/x-msschedule",
 "sct" => "text/scriptlet",
 "setpay" => "application/set-payment-initiation",
 "setreg" => "application/set-registration-initiation",
 "sh" => "application/x-sh",
 "shar" => "application/x-shar",
 "sit" => "application/x-stuffit",
 "snd" => "audio/basic",
 "spc" => "application/x-pkcs7-certificates",
 "spl" => "application/futuresplash",
 "src" => "application/x-wais-source",
 "sst" => "application/vnd.ms-pkicertstore",
 "stl" => "application/vnd.ms-pkistl",
 "stm" => "text/html",
 "svg" => "image/svg+xml",
 "sv4cpio" => "application/x-sv4cpio",
 "sv4crc" => "application/x-sv4crc",
 "t" => "application/x-troff",
 "tar" => "application/x-tar",
 "tcl" => "application/x-tcl",
 "tex" => "application/x-tex",
 "texi" => "application/x-texinfo",
 "texinfo" => "application/x-texinfo",
 "tgz" => "application/x-compressed",
 "tif" => "image/tiff",
 "tiff" => "image/tiff",
 "tr" => "application/x-troff",
 "trm" => "application/x-msterminal",
 "tsv" => "text/tab-separated-values",
 "txt" => "text/plain",
 "uls" => "text/iuls",
 "ustar" => "application/x-ustar",
 "vcf" => "text/x-vcard",
 "vrml" => "x-world/x-vrml",
 "wav" => "audio/x-wav",
 "wcm" => "application/vnd.ms-works",
 "wdb" => "application/vnd.ms-works",
 "wks" => "application/vnd.ms-works",
 "wmf" => "application/x-msmetafile",
 "wps" => "application/vnd.ms-works",
 "wri" => "application/x-mswrite",
 "wrl" => "x-world/x-vrml",
 "wrz" => "x-world/x-vrml",
 "xaf" => "x-world/x-vrml",
 "xbm" => "image/x-xbitmap",
 "xla" => "application/vnd.ms-excel",
 "xlc" => "application/vnd.ms-excel",
 "xlm" => "application/vnd.ms-excel",
 "xls" => "application/vnd.ms-excel",
 "xlt" => "application/vnd.ms-excel",
 "xlw" => "application/vnd.ms-excel",
 "xof" => "x-world/x-vrml",
 "xpm" => "image/x-xpixmap",
 "xwd" => "image/x-xwindowdump",
 "z" => "application/x-compress",
 "zip" => "application/zip");
 
 // Constructor
 public function mailsender($sender,$mailer,$tplstart,$tplend)
 {
   //imposto l'indirizzo email
   $this->sender=$sender; 
   //imposto il nome del inviante
   $this->mailer=$mailer; 
   
   //template inizio
   if(isset($tplstart) && $tplstart!="")
    $this->startTPL=$this->_openFile($tplstart);
   //template fine
   if(isset($tplend) && $tplend!="")
    $this->endTPL=$this->_openFile($tplend);
 } 
 
 //open file
 public function _openFile($fn)
 {
  $allegato = $fn;
  $file = fopen($allegato,'rb');
  $data = fread($file,filesize($allegato));
  fclose($file);
  return $data;
 }
 
 //get file exstension by name
 public function _fileExstensionByName($fn)
 {
  $fn=explode($fn,".");
  return $fn[count($fn)-1];
 }
 
 //create header
 public function _createHeader($cc)
 {
  // costruiamo alcune intestazioni generali
  $header = "From: ".$this->mailer." <".$this->sender.">\n";
  if(isset($cc) && $cc!="")
   $header .= "CC: $c <".$c.">\n";
  $header .= "X-Mailer: ".$this->mailer."\n";  
  $header .= "MIME-Version: 1.0\n";
  $header .= "Content-Type: multipart/related;\n";
  $header .= " type=\"multipart/alternative\";\n";
  $header .= " boundary=\"".$this->boundary1."\";\n\n";
  return $header;
 }
 
 //create separator
 public function _createBoundary()
 {
  $this->boundary1 = "==String_Boundary_x" .md5(time()). "x";
  $this->boundary2 = "==String_Boundary2_y" .md5(time()). "y";
 }
 
 //create content
 public function _createContent($content)
 {
  $messaggio = "Se visualizzi questo testo il tuo programma non supporta i MIME\n\n";

  // il primo segmento del multipart/related
  // è definito come multipart/alternative
  $messaggio .= "--".$this->boundary1."\n";
  $messaggio .= "Content-Type: multipart/alternative;\n";
  $messaggio .= " boundary=\"".$this->boundary2."\";\n\n";

  // sezione alternativa in puro testo
  $messaggio .= "--".$this->boundary2."\n";
  $messaggio .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
  $messaggio .= "Content-Transfer-Encoding: 7bit\n\n";
  $messaggio .= strip_tags($content,"")."\n\n"; //messaggio testuale senza html

  // sezione alternativa in formato html
  $messaggio .= "--".$this->boundary2."\n";
  $messaggio .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
  $messaggio .= "Content-Transfer-Encoding: 7bit\n\n";
  
  $messaggio .= $this->startTPL.$content.$this->endTPL."\n";  //messaggio html con tpl
  
  // chiusura della sezione multipart/alternative
  $messaggio .= "--".$this->boundary2."--\n";
  return $messaggio;
 }
 
 //Add attechment
 public function _addAttech($messaggio,$attech)  //$m messaggio, $a array alegati[]{['path']=>pathtofile | ['descrizione']=>nomefile}
 {
  if(isset($attech) && count($attech)>0)
  {
   foreach($attech as $a)
   {
    $messaggio .= "--".$this->boundary1."\n";
    $filename=explode("/",$a['path']);
	$filename=$filename[count($filename)-1];
    // seconda sezione del multipart/related contenente allegati
	$messaggio .= "Content-Disposition: attachment;\n";
    /*$messaggio .= "Content-ID: <".$a['descrizione'].">\n";*/
    $messaggio .= " filename=\"".$filename."\"\n";
    $messaggio .= "Content-Type: ".$this->mime_types[$this->_fileExstensionByName($a['path'])]."\n";
    $messaggio .= "Content-Transfer-Encoding: base64\n\n";
    
	//apro il messaggio
    $data=$this->_openFile($a['path']);
    //conversione base64_encode
    $data = chunk_split(base64_encode($data));
    $messaggio .= $data."\n\n";
   }
  }
  return $messaggio;
 }
 
 public function _closeMultipart($messaggio)
 {
  // chiusura della sezione multipart/related
  $messaggio .= "--".$this->boundary1."--\n";
  return $messaggio;
 }
 
 //sendmail function
 public function sendmail($to,$cc,$subj,$content,$attech)
 {
  //debug
  //ini_set("SMTP","smtp.gmail.com");
  
  $this->_createBoundary();                              //crea separatori
  $header=$this->_createHeader($cc);                     //crea header
  $messaggio=$this->_createContent($content);            //crea contenuto
  $messaggio=$this->_addAttech($messaggio,$attech);      //aggiunge al contenuto gli allegati
  $messaggio=$this->_closeMultipart($messaggio);         //chiude il multipart related
  if(mail($to, $subj, $messaggio, $header))              //invia email
   return true;
  else 
   return false;
 }
 
}
?>
 
Scusate vi chiedo un favore.
Potreste controllare se nella classe c'è qualche errore nel creare la mail?
Ne ho bisogno perchè non capisco più come fare. Qualsiasi link ho visto non mi aiuta.
E adesso non ha funzionato con una mail diversa da libero.
Non capisco se è colpa del sender-ID non implementato con l'SPF del server mail di aruba, oppure se è un problema di codice o di creazione dell'email da parte della classe che ho creato.

Grazie ancora dell'aiuto fin'ora dato
 
Hai ragione però ho creato una mia libreria apposta per poterla controllare come volevo e gestire un template, poi non conoscevo questa libreria.

Preferirei onestamente risolvere anche solo per capire e imparare i problemi sulle mail.

Poi credo proprio che userò phpmailer, però almeno capirci qualcosa...

Cmq grazie lo stesso. Se però qualcuno sa come risolvere il problema mi farebbe cmq un piacere.
 

Discussioni simili