Pièce jointe et mail en php

Fermé
nadia451 Messages postés 11 Date d'inscription jeudi 3 mai 2012 Statut Membre Dernière intervention 24 mai 2012 - 3 mai 2012 à 11:01
nadia451 Messages postés 11 Date d'inscription jeudi 3 mai 2012 Statut Membre Dernière intervention 24 mai 2012 - 3 mai 2012 à 11:41
Bonjour à tous,
Je rencontre un petit soucis avec mon code pour envoyer un mail avec pièce jointe en php.

En effet, j'ai une première page accueil.php avec laquelle on peut ajouter un fichier :
<p> <label>Résultat :</label> <input type="file" name="resultat" id="resultat"/></p>


sur une deuxième page cible.php je récupère cette variable dans :
$res = $_FILES['resultat'];


Je procède de la manière suivante pour l'envoie de mon mail :


ini_set('SMTP','smtp.orange.fr'); // ini_set() -> Modifie la valeur d'une option de configuration
ini_set('sendmail_from', $mailSig); //Mettre l'administrateur de UFOLEP Centre après :)
		


$mail = 'monAdresse@gmail.com'; // Déclaration de l'adresse de destination.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
{
	$passage_ligne = "\r\n";
}
else
{
	$passage_ligne = "\n";
}


//=====Déclaration des messages au format texte et au format HTML.
$message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP.";
$message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>";
//==========


/* *** On remplace les variables dynamiques (nom, prénom) par les vrais valeurs *** */
$message_txt = STR_replace("Nom",$nomSig,$message_txt);
$message_txt = STR_replace("Prenom",$prenomSig,$message_txt);



/* *** On remplace les variables dynamiques (nom, prénom) par les vrais valeurs *** */
$message_html = STR_replace("%Nom%",$nomSig,$message_html);
$message_html = STR_replace("%Prenom%",$prenomSig,$message_html);
		
 
//=====Lecture et mise en forme de la pièce jointe.
$fichier = fopen($res, "r");
$attach = fread($fichier, filesize($res));
$attach = fread($fichier, filesize($phot));
$attachement = chunk_split(base64_encode($attach));
fclose($fichier);
////==========
 

//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========
 
//=====Définition du sujet.
$sujet = "Fiche retour de manifestation !";
//=========
 
//=====Création du header de l'e-mail.
$header = "From: $mailSig".$passage_ligne;
$header.= "Reply-to: $mailSig".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
 
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;

//=====Ajout du message au format texte.
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
 
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
 
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
 
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
//==========
 
 
$message.= $passage_ligne."--".$boundary.$passage_ligne;
 

//=====Ajout de la pièce jointe.
//$message.= "Content-Type: application/pdf; name=\"$res\"".$passage_ligne;
//$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
//$message.= "Content-Disposition: attachment; filename=\"$res\"".$passage_ligne;
//$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
//$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
//========== 


//=====Ajout de la pièce jointe.
$message.= "Content-Type: image/jpeg; name=\"image.jpg\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"image.jpg\"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne; 
//========== 


//=====Envoi de l'e-mail.
mail($mail,$sujet,$message,$header);






quelqu'un peut m'éclairer ?? merci d'avance =)
A voir également:

2 réponses

mpmp93 Messages postés 6648 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
3 mai 2012 à 11:35
Bonjour,

1) je pense - c'est juste mon humble avis - que vous perdez beaucoup de temps à refaire ce qui existe déjà ailleurs.

2) je vous suggère d'intégrer Zend Framework et d'utiliser les méthodes mails de ZF.

Pour les pièces jointes, il y a tout ici:
http://framework.zend.com/manual/fr/zend.mail.attachments.html

et votre script serait réduit à quelques lignes:


    $mail = new Zend_Mail();
    // construction du message
    $mail->createAttachment($uneChaineBinaire);
    $mail->createAttachment($monImage,
                            'image/gif',
                            Zend_Mime::DISPOSITION_INLINE,
                            Zend_Mime::ENCODING_BASE64);


Vous pouvez utiliser ZF sans supporter tourte la couche MVC. Voici comment procéder:

        // Utilisaton module Mail de Zend Framework
        set_include_path('../');
        require_once 'Zend/Mail.php';
        $mail = new Zend_Mail('UTF8');


cette partie include ZF Mail

et plus loin:

        $mail->setBodyHtml($body);
        $mail->setFrom('admin@monsite.com');
        $mail->addTo('mail.destinataire@mail.com');
        $mail->setSubject("ici sujet du mail");


        $mail->setBodyHtml($body); // ici contenu du message

        ?>
    <?php if(!$mail->Send()): ?>
    <?php echo "Mailer Erreurs: " . $mail->ErrorInfo; ?>
    <?php else: ?>
        <p><b>Message envoyé!</b></p>
    <?php endif; ?>


maintenant, vous avez le choix:
- faire compliqué à votre manière
- utiliser ZF et faire plus simple...

A+

1
nadia451 Messages postés 11 Date d'inscription jeudi 3 mai 2012 Statut Membre Dernière intervention 24 mai 2012
3 mai 2012 à 11:41
Merci beaucoup pour ta réponse,
je viens de résoudre mon problème comme une grande =D en fait avant d'envoyer le mail je donne juste le nom de mon fichier et non pas le chemin du fichier upload .. c'est donc tout à fait normal que ça ne marche pas !
je vais quand même tester avec ZF =)

merci encore d'avoir répondu rapidement =)
0