Page 1 sur 1

envoi de mail avec fichier

Posté : 08 avr. 2012, 18:09
par msi79
salut je viens de trouver un code d'envoi de mail avec fichier que j'ai tenté d'adapter à mon cas .
mon problème est que je sais pas si j'ai bien adapté . et j'ai des problèmes de compréhension a certain niveau. et souvent le mail est envoyé et ouvent non. en plus l'envoi est lent et la page est lourde .

je met la les parties ou j'aimerai avoir des explication afin de souvoir si j'ai bien renseigné ses parties :
//=====Lecture et mise en forme de la pièce jointe.
$fichier   = fopen("upload_fichier/image.jpg", "r");
$attachement = fread($fichier, filesize("upload_fichier/image.jpg"));
et voici mon code complet :
<?php
ini_set('error_reporting', E_ALL); 
ini_set('display_errors', 1); 

ini_set('SMTP','smtp.aviso.ci'); 
ini_set('smtp_port', 25); 
ini_set('sendmail_from','[email protected]');


$mail = '[email protected]'; // 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>";
//==========
 
//=====Lecture et mise en forme de la pièce jointe.
$fichier   = fopen("upload_fichier/image.jpg", "r");
$attachement = fread($fichier, filesize("upload_fichier/image.jpg"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========
 
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========
 
//=====Définition du sujet.
$sujet = "Hey mon ami !";
//=========
 
//=====Création du header de l'e-mail.
$header = "From: \"WeaponsB\"<[email protected]>".$passage_ligne;
$header.= "Reply-to: \"WeaponsB\" <[email protected]>".$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: image/jpeg; name=\"upload_fichier/image.jpg\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"upload_fichier/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);
 
//==========
?>
NB : s'il ya des partie que je pourai ameliorer montrer les mois

Re: envoi de mail avec fichier

Posté : 08 avr. 2012, 18:27
par AB
Si upload_fichier/image.jpg est lourd, c'est normal que l'envoi soit lent... Essaies avec des images moins lourdes pour un envoi plus rapide.

Par ailleurs ce code
//=====Lecture et mise en forme de la pièce jointe.
$fichier   = fopen("upload_fichier/image.jpg", "r");
$attachement = fread($fichier, filesize("upload_fichier/image.jpg"));
ne te permettra que d'uploader un fichier écrit dans ton script. Si tu veux pouvoir choisir le fichier joint par l'intermédiaire de l'explorateur de fichiers au moment de l'envoi, le code sera sensiblement différent.

Tu dis que ça ne marche pas tout le temps. Attends quelques heures, peut-être finira-tu par recevoir tous les mails envoyés (ce n'est pas toujours "instantané").

Re: envoi de mail avec fichier

Posté : 08 avr. 2012, 18:37
par msi79
La j'ai 2 préoccupations :
1. je comprend pas bien :
ce code ne te permettra que d'uploader un fichier écrit dans ton script. Si tu veux pouvoir choisir le fichier joint par l'intermédiaire de l'explorateur de fichiers au moment de l'envoi, le code sera sensiblement différent .

2. j'ai poursuivi pour pouvoir atteindre mon objetif s'est à dire dès qu'on impute le courrier à quelqu'on(le destinateire) en clickant sur le bouton valider la personne reçois un mail et un fichier .
quand j'execute je rècois le mail mais le fichier ne s'ouvre pas .

voici les erreur affichées :
Warning: fopen(upload_fichier/image.jpg) [function.fopen]: failed to open stream: No such file or directory in C:\wamp\www\GESTION COURRIER MINISTERE_email\testmail3.php on line 105

Warning: filesize() [function.filesize]: stat failed for upload_fichier/image.jpg in C:\wamp\www\GESTION COURRIER MINISTERE_email\testmail3.php on line 106

Warning: fread() expects parameter 1 to be resource, boolean given in C:\wamp\www\GESTION COURRIER MINISTERE_email\testmail3.php on line 106

Warning: fclose() expects parameter 1 to be resource, boolean given in C:\wamp\www\GESTION COURRIER MINISTERE_email\testmail3.php on line 108

voici mon code :
<?php
if (isset($_POST["valider"])) {
    
      /*IMPORTANT*/ 

include("connection.php"); 

/*faut securiser*/ 
foreach($_POST as $k => $v){ 
$v=mysql_real_escape_string(strip_tags($v)); 
$_POST[$k]=$v; 
} 

/*faut securiser*/ 
foreach($_GET as $k => $v){ 
$v=mysql_real_escape_string(strip_tags($v)); 
$_POST[$k]=$v; 
}
   
    $NumEnreg=trim($_POST["NumEnreg"]);
    $dateArrCourrier=trim($_POST["dateArrCourrier"]);
	$dateReinsert=trim($_POST["dateReinsert"]);
	$expediteur=trim($_POST["expediteur"]);
	$destinataire=trim($_POST["destinataire"]);
	$DateImput=trim($_POST["DateImput"]);
	$delaisImput=trim($_POST["delaisImput"]);
	$instructions=trim($_POST["instructions"]);
	$autreInstruction=trim($_POST["autreInstruction"]);
	$contact=trim($_POST["contact"]);
	$NoteDirCab=trim($_POST["NoteDirCab"]);
	$NoteMinitr=trim($_POST["NoteMinitr"]);
	$monemail=trim($_POST["monemail"]);
	 //requète sql
    $sql = "SELECT NumEnreg FROM Courrierimputation WHERE NumEnreg='$NumEnreg'"; 
    $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());  
     
    // on compte le nombre de résultats 
    $res = mysql_num_rows($req); 

      if($res!=0)  // l'url existe déjà, on affiche un message d'erreur 
        { 
             $msg = 'Désolé, mais ce numero  existe déjà dans notre base.'; 
             echo '<script>alert(\' '.$msg.' \');</script>';
        } 
      else  // L'url n'existe pas, on insère les informations du formulaire dans la table 
        { 

// insertion de l'ex-combattants
 $sql = "INSERT INTO Courrierimputation(      id,NumEnreg,dateArrCourrier,expediteur,destinataire,monemail,DateImput,delaisImput,instructions,autreInstruction,contact,NoteDirCab,NoteMinitr)																																																																																																																																																																																				VALUES('','".$NumEnreg."','".$dateArrCourrier."','".$expediteur."','".$destinataire."','".$monemail."','".$DateImput."','".$delaisImput."','".$instructions."','".$autreInstruction."','".$contact."','".$NoteDirCab."','".$NoteMinitr."')";
      // on insère les informations du formulaire dans la table  
    $result= mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
      $msg =  'Les informations sur le courrier ont été ajoutées ont été ajoutées dans la base de données.</br>';
      ///echo '<font color="red">'.$msg.'</font>'; 
      echo '<script>alert(\' '.$msg.' \');</script>';


      }
	  if($result) 
	     {
		     $q = mysql_query("SELECT * FROM Courrierimputation where NumEnreg=$NumEnreg"); // requete 
			  if (!$q) {
                  echo 'Impossible d\'exécuter la requête : ' . mysql_error();
                    exit;
                }
while ($row = mysql_fetch_assoc($q)) {
    //echo $row['monemail'];

//echo $row[0]; // 42
//echo $row[1]; // la valeur du champ email


ini_set('error_reporting', E_ALL); 
ini_set('display_errors', 1); 

ini_set('SMTP', 'smtp.aviso.ci'); 
ini_set('smtp_port', 25); 
ini_set('sendmail_from', '[email protected]'); 
       
	   // To
       
      $mail = $row['monemail'] ;
 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>";
//==========
 
//=====Lecture et mise en forme de la pièce jointe.
$fichier   = fopen("upload_fichier/image.jpg", "r");
$attachement = fread($fichier, filesize("upload_fichier/image.jpg"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
//==========
 
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========
 
//=====Définition du sujet.
$sujet = "Hey mon ami !";
//=========
 
//=====Création du header de l'e-mail.
$header = "From: \"WeaponsB\"<[email protected]>".$passage_ligne;
$header.= "Reply-to: \"WeaponsB\" <[email protected]>".$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: image/jpeg; name=\"upload_fichier/image.jpg\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"upload_fichier/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);
 
//==========
		 }
  }
  
}
?>

Re: envoi de mail avec fichier

Posté : 08 avr. 2012, 19:01
par AB
Warning: fopen(upload_fichier/image.jpg) [function.fopen]: failed to open stream: No such file or directory in C:\wamp\www\GESTION COURRIER MINISTERE_email\testmail3.php on line 105
Cela veut dire que le script ne trouve pas de fichier avec l'adresse "upload_fichier/image.jpg"