pièces jointes vers hotmail ne marche pas

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : pièces jointes vers hotmail ne marche pas

Re: pièces jointes vers hotmail ne marche pas

par Sékiltoyai » 04 sept. 2009, 15:58

Peut être que finalement la taille compte un peu ? (dédicace à Mere-T :) )

T'as essayé en l'envoyant d'un bon vieux client mail vers hotmail ?

pièces jointes vers hotmail ne marche pas

par kamelini » 04 sept. 2009, 14:47

Bonjour,

Il y a une erreur sur les pièces jointes format PDF vers hotmail. Elles s'affichent avec une taille de 0 Ko. Lors de l'ouverture des fichiers PDF il y a une erreur!

Pourquoi ça ne marche pas pour hotmail alors que ça marche vers yahoo, gmail, et le webmail de ovh?

J'utilise la class mail utilisée aussi par joomla!

Alors Voici le code de la class mail que j'ai modifié
class Mail {

        var $sendto= array();
        var $from, $msubject;
        var $acc= array();
        var $abcc= array();
        var $aattach= array();
        var $priorities= array( '1 (Highest)', '2 (High)', '3 (Normal)', '4 (Low)', '5 (Lowest)' );
        var $adr;

// Mail contructor

function Mail() {

        $this->autoCheck( true );
}


/*                autoCheck( $boolean )
 *                activate or desactivate the email addresses validator
 *                ex: autoCheck( true ) turn the validator on
 *                by default autoCheck feature is on
 */

function autoCheck( $bool ) {

        if( $bool )
                $this->checkAddress = true;
        else
                $this->checkAddress = false;
}


/*                Subject( $subject )
 *                define the subject line of the email
 *                $subject: any valid mono-line string
 */

function Subject( $subject ) {

          $this->msubject = strtr( $subject, "\r\n" , "  " );
}


/*                From( $from )
 *                set the sender of the mail
 *                $from should be an email address
 */

function From( $from ) {

        if( ! is_string($from) ) {
                echo "Class Mail: Erreur, From n'est pas de la bonne forme";
                exit;
        }

        $this->from= $from;
}


/*                To( $to )
 *         set the To ( recipient )
 *                $to : email address, accept both a single address or an array of addresses
 */

function To( $to ) {

        // TODO : test validité sur to
        if( is_array( $to ) )
                $this->sendto= $to;
        else
                $this->sendto[] = $to;

        if( $this->checkAddress == true )
                $this->CheckAdresses( $this->sendto );
}


/*                Cc()
 *                set the CC headers ( carbon copy )
 *                $cc : email address(es), accept both array and string
 */

function Cc( $cc ) {

        if( is_array($cc) )
                $this->acc= $cc;
        else
                $this->acc[]= $cc;

        if( $this->checkAddress == true )
                $this->CheckAdresses( $this->acc );
}


/*                Bcc()
 *                set the Bcc headers ( blank carbon copy ).
 *                $bcc : email address(es), accept both array and string
 */

function Bcc( $bcc ) {

        if( is_array($bcc) ) {
                $this->abcc = $bcc;
        } else {
                $this->abcc[]= $bcc;
        }

        if( $this->checkAddress == true )
                $this->CheckAdresses( $this->abcc );
}


/*                Body()
 *                set the body of the mail ( message )
 */

function Body( $body ) {

        $this->body= $body;
}


/*                Send()
 *                fornat and send the mail
 */

function Send() {

        // build the headers
        $this->_build_headers();

        // include attached files
        if( sizeof( $this->aattach > 0 ) ) {
                $this->_build_attachement();
                $body = $this->fullBody . $this->attachment;
        }

        // envoie du mail aux destinataires principaux
        for( $i=0; $i< sizeof($this->sendto); $i++ ) {
                $res = mail($this->sendto[$i], $this->msubject,$body, $this->headers);
                // TODO : trmt res
        }

}


/*                Organization( $org )
 *                set the Organisation header
 */

function Organization( $org ) {

        if( trim( $org != "" )  )
                $this->organization= $org;
}


/*                Priority( $priority )
 *                set the mail priority
 *                $priority : integer taken between 1 (highest) and 5 ( lowest )
 *                ex: $m->Priority(1) ; => Highest
 */

function Priority( $priority ) {

        if( ! intval( $priority ) )
                return false;

        if( ! isset( $this->priorities[$priority-1]) )
                return false;

        $this->priority= $this->priorities[$priority-1];

        return true;
}


/*                Attach( $filename, $filetype )
 *                attach a file to the mail
 *                $filename : path of the file to attach
 *                $filetype : MIME-type of the file. default to 'application/x-unknown-content-type'
 *                $disposition : instruct the Mailclient to display the file if possible ("inline") or always as a link ("attachment")
 *                        possible values are "inline", "attachment"
 */

function Attach($filename) {
$filetype='application/x-unknown-content-type';
$disposition = "inline";
        // TODO : si filetype="", alors chercher dans un tablo de MT connus / extension du fichier
        $this->aattach[] = $filename;
        $this->actype[] = $filetype;
        $this->adispo[] = $disposition;
}


/*                Get()
 *                return the whole e-mail , headers + message
 *                can be used for displaying the message in plain text or logging it
 */

function Get() {

        $this->_build_headers();
        if( sizeof( $this->aattach > 0 ) ) {
                $this->_build_attachement();
                $this->body= $this->body . $this->attachment;
        }
        $mail = $this->headers;
        $mail .= "\n$this->body";
        return $mail;
}


/*         ValidEmail( $email )
 *         return true if email adress is ok - regex from Manuel Lemos ([email protected])
 *                $address : email address to check
 */

function ValidEmail($address) {

        if( ereg( ".*<(.+)>", $address, $regs ) ) {
                $address = $regs[1];
        }
	
         if(ereg( "^[^@  ]+@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9\-]{2}|net|fr|com|gov|mil|org|edu|int)\$",$address) )
                 return true;
         else
                 return false;
}


/*                CheckAdresses()
 *         check validity of email addresses
 *         if unvalid, output an error message and exit, this may be customized
 *                $aad : array of emails addresses
 */

function CheckAdresses( $aad ) {

        for($i=0;$i< sizeof( $aad); $i++ ) {
	
                if( ! $this->ValidEmail( $aad[$i]) ) {
                        //echo "Class Mail, method Mail : Adresse Invalide $aad[$i]";	
						$sent = "non";
						//echo "Votre mail est incorrect <a href=\"http://www.monsite.com/index.php?page=shop.cart&option=com_virtuemart&sent=".$sent."\">Retour au panier</a>" ;	
						echo "Votre mail est incorrect <a href=\"http://www.monsite.com/index.php?page=shop.cart&option=com_virtuemart&sent=".$sent."\">Retour au panier</a>" ;					         
                        exit;						
                }
        }
}


/********************** PRIVATE METHODS BELOW **********************************/



/*                _build_headers()
 *                 [INTERNAL] build the mail headers
 */

function _build_headers() {

        // creation du header mail

        $this->headers= "From: $this->from\n";

        $this->to= implode( ", ", $this->sendto );

        if( count($this->acc) > 0 ) {
                $this->cc= implode( ", ", $this->acc );
                $this->headers .= "CC: $this->cc\n";
        }

        if( count($this->abcc) > 0 ) {
                $this->bcc= implode( ", ", $this->abcc );
                $this->headers .= "BCC: $this->bcc\n";
        }

        if( $this->organization != ""  )
                $this->headers .= "Organization: $this->organization\n";

        if( $this->priority != "" )
                $this->headers .= "X-Priority: $this->priority\n";
}

/*
 *                _build_attachement()
 *                internal use only - check and encode attach file(s)
*/

function _build_attachement() {

        $this->boundary= "------------" . md5( uniqid("myboundary") ); // TODO : variable bound
		
		
		
		

        $this->headers .= "MIME-Version: 1.0\nContent-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n\n";
       // $this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/plain; charset=us-ascii\nContent-Transfer-Encoding: 7bit\n\n" . $this->body ."\n";
        //$this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/html; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\n\n" . $this->body ."\n";
        
		
		
		
			// Modifications kamel
		
        //$adresse = "[email protected]";		
		//$adresse = "[email protected]";
		//$adresse = "[email protected]";
		
		$adresse = $this->adr;
		
		$adresse = explode("@", $adresse);
		$adresse1 = $adresse[1];
		$adresse1 = explode(".", $adresse1);
		if (($adresse1[0]=="hotmail") || ($adresse1[0]=="live") ) {		  
		   //$this->fullBody = $this->body;  
		   $this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\n\n" . $this->body ."\n";
		}elseif(($adresse1[0]=="gmail")||($adresse1[0]=="yahoo")){		
			$this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: 8bit\n\n" . $this->body ."\n";
		}else{
		$this->fullBody = "This is a multi-part message in MIME format.\n--$this->boundary\nContent-Type: text/plain; charset=iso-8859-1\nContent-Transfer-Encoding: 8bit\n\n" . $this->body ."\n";
		}
        
		
        $sep= chr(13) . chr(10);

        $ata= array();
        $k=0;

        // for each attached file, do...
        for( $i=0; $i < sizeof( $this->aattach); $i++ ) {

                $filename = $this->aattach[$i];
                $basename = basename($filename);
                $ctype = $this->actype[$i];        // content-type
                $disposition = $this->adispo[$i];

                if( ! file_exists( $filename) ) {
                        echo "Class Mail, method attach : file $filename can't be found"; exit;
                }
                $subhdr= "--$this->boundary\nContent-type: $ctype;\n name=\"$basename\"\nContent-Transfer-Encoding: base64\nContent-Type: application/pdf\nContent-Disposition: $disposition;\n  filename=\"$basename\"\n";
                $ata[$k++] = $subhdr;
                // non encoded line length
                $linesz= filesize( $filename)+1;
                $fp= fopen( $filename, 'r' );
                $data= base64_encode(fread( $fp, $linesz));
                fclose($fp);
                $ata[$k++] = chunk_split( $data );
        }

        $this->attachment= implode($sep, $ata);
}


} // class Mail



J'ai modifier avec succès la fonction function _build_headers pour conditionner le codage du charset de l'entête convenablement afin d'afficher correctement les caractères.

Par contre pour l'attachement d'une pièce jointe de format PDF j'ai testé sans succès le code application/pdf , application/octet-stream et sans ces deux derniers dans plusieurs endroit à savoir:
function Attach($filename) {
$filetype='application/x-unknown-content-type';
et
application/pdf dans la fonction function _build_headers pour
et enfin dans l'appelle de la fonction Attach de la class mail
$m= new Mail; 
$m->adr = $dest; 
        $m->From( " Mon Entreprise <[email protected]>" );    
	$m->To( "$dest");	
        $m->Subject( "$subject" );
        $m->Body( $msg);   
[b]$m->Attach("monfichier.pdf", "application/octet-stream" );[/b]
$m->Send();
Merci infiniment.

Merci