Envoi des emails avec MIME et des fichiers attachés

Eléphant du PHP | 66 Messages

21 déc. 2006, 17:57

Bonjour
Un problème d'envoi des adresses Emails via un formulaire WEB avec la posibilité d'envoyer plusieurs fichiers uploadés...
en premier lieux je télécharge les fichiers sur le serveur, et je transmis la liste des fichiers dans une variable POST. mon problème c'est qu'il envoi l'email mais le contenu du mail est codé c comme si c t le fread() du fichier avec le codage chunsk_split, donc je suppose que c'est un prblm de header.
@ini_set('max_execution_time','999999');
@ini_set('SMTP','smtp.serveur.com');
$n_ligne="\n";
$boundary= "--".md5(uniqid(rand()));
///////////////////// AATCTAHHCC ////////////////
function attachm($nom_fichier,$boundarys)
{
		$n_ligne="\n";
		//extension er type
		$exts=explode(".",$nom_fichier);
		$extns=strtolower($exts[(sizeof($exts)-1)]);
		if($extns=="pdf")
		$extns="application/pdf";
		else if($extns=="doc")
		$extns="application/msword";
		else
		$extns="image/jpg";
		////
		
		$fichier="mailing/files_mail/$nom_fichier";
		$handle=fopen($fichier, 'rb');
		$contenu_f=fread($handle, filesize($fichier));
		$contenu_f=chunk_split(base64_encode($contenu_f));
		fclose($handle);
		
		
		$reponse=$boundrys;
		$reponse.="Content-Type: $extns; name=\"".$nom_fichier."\"$n_ligne";
		$reponse.="Content-Transfer-Encoding: base64 $n_ligne";
		$reponse.="Content-Disposition: attachment; filename=\"".$fichier."\"".$n_ligne.$n_ligne;
		$reponse.="$contenu_f".$n_ligne.$n_ligne;
		$reponse.=$boundrys."--".$n_ligne.$n_ligne;
return $reponse;	
}		
//////////////////////////////	

//////////////////////////// TABLEAU D'ENVOIE ///////////////
	switch($_POST["groupe"])
	{
	case 'tous':$i=0;
				$mails_rq=mysql_query("SELECT email_annuaire FROM annuaire_jd");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				unset($mails_rq,$mail_tab);
				$mails_rq=mysql_query("SELECT email  FROM emails");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				unset($mails_rq,$mail_tab);
				$mails_rq=mysql_query("SELECT email  FROM users");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				unset($mail_rq,$mail_tab);
				$mails_rq=mysql_query("SELECT mail_m  FROM grp_mail_m");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				break;
	case 'jd':  $i=0;
				$mails_rq=mysql_query("SELECT email_annuaire FROM annuaire_jd");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
				
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				break;
	default:	unset($mails_rq,$mail_tab);$i=0;
				$mails_rq=mysql_query("SELECT mail_m  FROM mail_mailing WHERE grp_mail_m='".$_POST["groupe"]."'");
				while($mail_tab=mysql_fetch_array($mails_rq))
				{
					if($mail_tab[0]!="")
					{
					$mails[$i]=$mail_tab[0];
					$i++;
					}
				}
				break;
	}


$header="MIME-Version: 1.0".$n_ligne.$n_ligne;
$header.="Content-Type: multipart/related; boundary=\"".$boundary."\"".$n_ligne.$n_ligne;
$header.="From: Webmaster CJD<[email protected]>$n_ligne";
//$header.="Content-Type: multipart/mixed; ".$n_lignes.$n_ligne;
//$header.="Content-Type: text/html; charset=\"iso-8859-1\"".$n_ligne;


$message=$boundary.$n_ligne.$n_ligne;
$message.="Content-Type: text/html; charset=\"iso-8859-1\"".$n_ligne;
$message.="Content-Transfer-Encoding: 8bit".$n_ligne.$n_ligne;*/
$message.=$_POST["text"].$n_ligne.$n_ligne;

if(!empty($_POST["attach_files"]))
{
$files=explode("|",$_POST["attach_files"]);
	foreach($files as $fich_up)
		if($fich_up!="")
		{
		$message.=attachm($fich_up,$boundary);
		}
}else{
$message.=attachm("no.jpg",$boundary);
}
$message.="--".$boundary."--".$n_ligne.$n_ligne;*/
//echo $message;
	$nbr_env=0;
	$nbr_n_env=0;
//echo $header;
	foreach($mails as $adre_mail)
	{
		if(mail($adre_mail,"Centre des Jeunes Dirigeants",$message,$header))
		{
		$nbr_env++;
		}else
		$nbr_n_env++;
	
	$adr++;
	}

	
Mess With Best or die With the Rest

Eléphant du PHP | 66 Messages

21 déc. 2006, 18:06

je voulé rajouter qu'avec cette ligne:
$header.="Content-Type: multipart/mixed; boundary=\"".$boundary."\"".$n_ligne.$n_ligne;
je reçoit un email vide
mais si je met
$header.="Content-Type: multipart/mixed; ".$n_ligne.$n_ligne;
je reçoit le message codé comme je vous est indiqué

Merci
Mess With Best or die With the Rest

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 déc. 2006, 18:11

Je ne suis pas spécialiste des mails mais il me semble qu'il faut répéter le boundary autour de chaque pièce jointe et non pas seulement autour de l'ensemble des pièces jointes :?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 66 Messages

21 déc. 2006, 18:47

C'est ce que j'ai fais, pour chaque fichier attaché j'appelle la fonction attachm()
:(
Mess With Best or die With the Rest

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 déc. 2006, 19:16

Dans ce cas là, je ne suis pas sur qu'il faille répéter les headers à chaque pièce jointe...
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer