Problemes avec ma méthode d envoie de mail

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 : Problemes avec ma méthode d envoie de mail

par BaLiSTiK » 07 avr. 2009, 08:37

Je me suis aperçu que j avais pas changé le charset, j avais gardé le iso-8859-1 au lieu du US-ASCII comme dans ton posts, resultat, ce matin, les mails etaient tj mals formés, serait-ce du à ça ?

J ai modifié ma méthode comme suit, elle devrait être correcte normalement :
	/** fonction permmettant d envoyer un mail **/
	function _sendMail($message,$exp,$dest,$objet){
		
		//$msg = message envoyé
		//$exp = personne qui expedie le message
		//$dest = destinataire qui recevra le message
		$random_hash = "PHP-alt-".md5(date('r', time()));
		
		$head = "MIME-Version: 1.0\n";
		$head.= "Content-Type: multipart/alternative;\n"; 
		$head.= "boundary=\"----=".$random_hash."\"\n";
		$head .= "Reply-to: ".$dest."\n";
		$head .= " \n";
		
		//$msg = "Ceci est un message au format MIME.\n"; 
		//$msg = "\n\n------=".$random_hash."\n";  
		
		//Premiere partie du message
		//Frontiere
		//Contenu message
		$message_txt = strip_tags(str_replace('<br>',chr(10),$message));
		$msg .= "Content-Type: text/plain; charset=\"US-ASCII\"\n"; 
		$msg .= "Content-Transfer-Encoding: 7bit\n\n";  
		$msg .= $message_txt."\n\r";
		$msg .= "\n\n------=".$random_hash."\n";
		
		$msg .= "Content-Type: text/html; charset=\"US-ASCII\"\n"; 
		$msg .= "Content-Transfer-Encoding: 7bit\n\n";  
		$msg .= $message."\n\r";
		$msg .= "\n\n------=".$random_hash."\n"; 
	//	$msg .= '--'.$random_hash.'--';
		
		//Attachement de l image
		$fichier = fopen($_SERVER['DOCUMENT_ROOT'].'/images/site-creation.jpg','r');   //on ouvre le fichier en lecture seule
		$attachement = fread($fichier, filesize($_SERVER['DOCUMENT_ROOT'].'/images/site-creation.jpg')); //on lit l'ensemble du fichier avec la fonction fread
		$attachement = chunk_split(base64_encode($attachement));
		fclose($fichier); //on ferme le fichier
		
		//=====Ajout de la pièce jointe
		$msg .= "Content-Type: image/jpeg;\n name=\"site-creation.jpg\"\n";
		$msg .= "Content-Transfer-Encoding: base64\n";
		$msg .= "Content-Disposition: attachment;\n filename=\"site-creation.jpg\"\n";
		
		$msg.= "\n\n------=".$random_hash."--\n"; 

		@mail($dest,$objet,$msg,"Reply-to:$exp\nFrom: $exp\n".$head);
	}
EDIT : je viens de relancer et toujours apreil, sous GMAIL c est illisible, il affiche les characteres HTML comme ceci :
------=PHP-alt-77c3bb0586d2867175fe1c4f28e47dfd
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Liste des questions pos&eacute;es sur le site des experts le 6/04/2009 : <br /><p>Question de bananita<br />Date : le 06/04/2009&nbsp;&agrave;&
Alors que maintenant sous Thunderbird, je n'ai plus rien, le mail est vide :?

EDIT 2 : Le probleme est résolu, je met le code qui fonctionne :

CODE :
	/** fonction permmettant d envoyer un mail **/
	/** Parametre de la fonction : le message, mail expediteur, mail destinataire, objet du message **/
	function _sendMail($message,$exp,$dest,$objet){
		
		//$msg = message envoyé
		//$exp = personne qui expedie le message
		//$dest = destinataire qui recevra le message
				//$msg = message envoyé
		//$exp = personne qui expedie le message
		//$dest = destinataire qui recevra le message
		//$random_hash = "PHP-alt-".md5(date('r', time()));
		$random_hash = md5(uniqid(rand()));
		$head = "MIME-Version: 1.0\n";
		$head .= "Content-Type: multipart/alternative; boundary=\"$random_hash\"\n";
		$head .= "\n";
		
		$msg = "Ce message est au format MIME.\n"; 
		$msg .= "\n";
		
		//Premiere partie du message
		//Frontiere
		//Contenu message HTML
		$msg .= "--$random_hash\n"; 
		$msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
		$msg .= "Content-Transfer-Encoding: 7bit\n";  
		$msg .= stripslashes($message)."\n\n";
		$msg .= "<img src=\"cid:image1\" alt=\"\">";
		$msg .= "\n\n";

		//Contenu Message format texte
		$msg .= "--$random_hash\n";
		$msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
		$msg .= "Content-Transfer-Encoding: 7bit\n\n";  
		$message_txt = strip_tags(str_replace('<br>',chr(10),html_entity_decode($message)));
		$msg .= stripslashes($message_txt)."\n";
		$msg .= "\n";
		
		//Attachement de l image
		$fichier = fopen('/home/site/site.com/public_html/images/site-creation.jpg','r');   //on ouvre le fichier en lecture seule
		$file = fread($fichier, filesize('/home/site/site.com/public_html/images/site-creation.jpg')); //on lit l'ensemble du fichier avec la fonction fread
		//$attachement = '/home/site/site.com/public_html/images/site-creation.jpg';
		//$attachement = file_get_contents($attachement);
		$file = chunk_split(base64_encode($file));
		fclose($fichier); //on ferme le fichier
		
		//=====Ajout de la pièce jointe
		$msg .= "--$random_hash\n";
		$msg .= "Content-Type: image/jpeg;\n name=\"$file\"\n";
		$msg .= "Content-Transfer-Encoding: base64\n";
		$msg .= "Content-Disposition: inline;\n filename=\"$file\"\n";
		$msg .= "Content-ID: <image1>\n";
		$msg .= "\n";
		$msg .= $file . "\n";
		$msg .= "\n";
		
		$msg .= "--$random_hash--\n"; 
		
		@mail($dest,$objet,$msg,"Reply-to:$exp\nFrom: $exp\n".$head);

par Ryle » 06 avr. 2009, 17:48

Nope, y a pas de $head1 ou $head2... il y a un seul et unique entête pour tout ton mail. Par conséquent, cet entête doit signaler que le mail ca contenir plusieurs parties alternatives et spécifier comment sont séparés ces parties :
$head.= "Content-Type: multipart/alternative;\n"; 
$head.= "boundary=\"----=".$random_hash."\"\n"; 
Tout le reste se passe dans le corps du mail.
$msg = "Ceci est un message au format MIME.\n"; 
$msg = "\n\n------=".$random_hash."\n"; 

// le message texte brut
$msg.= "Content-Type: text/plain; charset=\"US-ASCII\"\n"; 
$msg.= "Content-Transfer-Encoding: 7bit\n\n"; 
$msg.= ....; // ton message texte
$msg = "\n\n------=".$random_hash."\n"; 

// le message html
$msg.= "Content-Type: text/html; charset=\"US-ASCII\"\n"; 
$msg.= "Content-Transfer-Encoding: 7bit\n\n"; 
$msg.= ....; // ton message en html
$msg.= "\n\n------=".$random_hash."\n";
A noter qu' il est parfois nécessaire d'ajouter un "--" après le dernier boundary :
$msg.= "\n\n------=".$random_hash."--\n";

par BaLiSTiK » 06 avr. 2009, 16:25

Donc, faire $head1, puis $head2 ? mais je met quelle variable de head dans la fonction mail ?
Je captes pas trop comment separer.

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

par Ryle » 06 avr. 2009, 15:21

C'est parce que tes content-type ne sont pas placés correctement... Tu te contentes de tous les ajouter à la suite dans le $head, alors que chaque partie du message (texte et html) doit avoir son propre content-type, pour spécifier que ce qui suit est du texte ou du html :)

par BaLiSTiK » 06 avr. 2009, 15:04

Il passe bien sur toutes les boites mails, excepté que sur la majorité, c est le html qui passe pas. les gens voient les balises html, y a le random_hash qui s affiche en haut du mail..une horreur, voila ce que ça donne par exemple sur Gmail :
--PHP-alt-3be5530a19dfa6092659fb2bdda236c3
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Liste des questions pos&eacute;es sur le site blab bla...

par stopher » 06 avr. 2009, 14:54

Slt ,

Si ton mail passe sur certaines boite , c'est que ton script fonctionne ..

S'il ne passe pas sur d'autre , c'est donc qu'il est certainement bloqué pour une raison X ( souvent non conforme à une série de régles ) ...

Envoies via ton script un mail à l'adresse suivante : [email protected]

(Attention , ton adresse de retour doit être valide ) Tu vas ensuite recevoir un rapport sur le mail envoyé .

Edites le ici ..

Ch.

Problemes avec ma méthode d envoie de mail

par BaLiSTiK » 06 avr. 2009, 14:14

Bonjour,
J ai un soucis avec ma méthode d envoie de mail. Mon message est écrit en html, et sur certaines boites mail, ça ne passe pas du tout, alors que quand je reçois sur Thunderbird, le mail est nickel. Donc je désirerai avoir quelques conseils pour pallier à mon soucis et permettre la reception d'un mail nickel, quelque soit la boite mail.

Ma méthode :
	/** fonction permmettant d envoyer un mail **/
	function _sendMail($message,$exp,$dest,$objet){
		
		//$msg = message envoyé
		//$exp = personne qui expedie le message
		//$dest = destinataire qui recevra le message
		$random_hash = "PHP-alt-".md5(date('r', time()));
		
		$head = "MIME-Version: 1.0\n";
		$head .= "Content-Type: multipart/alternative; boundary=\"".$random_hash."\"";
		$head .= "Reply-to: ".$dest."\n";
		$head .= " \n";
		
		//$msg .= "Ce message est au format MIME ...\n";
		//$msg .= "\n";
		
		//Premiere partie du message
		//Frontiere
		//Contenu message
		$message_txt = strip_tags(str_replace('<br>',chr(10),$message));
		//$msg = "--".$random_hash."\n";
		$head .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
		$head .= "Content-Transfer-Encoding: 7bit\n\r";
		$msg .= $message_txt."\n\r";
		
		//$msg .= "--".$random_hash."\n";
		$head .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
		$head .= "Content-Transfer-Encoding: 7bit\n\r";
		$msg .= $message."\n\r";
		
	//	$msg .= '--'.$random_hash.'--';
		
		//Attachement de l image
		$fichier = fopen($_SERVER['DOCUMENT_ROOT'].'/images/site-creation.jpg','r');   //on ouvre le fichier en lecture seule
		$attachement = fread($fichier, filesize($_SERVER['DOCUMENT_ROOT'].'/images/site-creation.jpg')); //on lit l'ensemble du fichier avec la fonction fread
		$attachement = chunk_split(base64_encode($attachement));
		fclose($fichier); //on ferme le fichier
		
		//=====Ajout de la pièce jointe
		$msg .= "Content-Type: image/jpeg;\n name=\"site-creation.jpg\"\n";
		$msg .= "Content-Transfer-Encoding: base64\n";
		$msg .= "Content-Disposition: attachment;\n filename=\"site-creation.jpg\"\n";
		//$msg .= "\n".$attachement."\n\n";
		//$msg .= "\n--".$boundary."--\n"; 

		@mail($dest,$objet,$msg,"Reply-to:$exp\nFrom: $exp\n".$head);
	}