8792 sujets

Développement web côté serveur, CMS

Bonjour,

J'utilise le code ci-dessous pour envoyer un mail avec php


<?php
$mail = 'xxxxxx@xxxx.net';
$titre = 'message de test';

$message = '
		<html>
			  <head>
			   <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
			   <meta http-equiv="Content-Language" content="fr">
			   <title>Mon message test.</title>
			  </head>
			
			  <body>
				<p>Contenu de mon message test</p>		
			 </body>
			 
		</html>';
		
		// Parametre pour envoie du mail au format html.
		$headers = "MIME-Version: 1.0\r\n";
		$headers .= "content-type: text/html; charset=utf-8\r\n";
		
		// D'autres en-têtes : errors, From cc's, bcc's, etc :
		$headers .= 'From: Stages de recuperation de points <yyyyyyy@xxxx.net>\r\n';
		
		//envoi du mail :
		mail($mail, $titre, $message, $headers);
		
		echo 'message envoyé';
?>


Je reçois bien le mail mais ça affiche ceci :

a écrit :

Mime-Version: 1.0 Content-Transfer-Encoding: BASE64 CgkJPGh0bWw+CgkJCSAgPGhlYWQ+CgkJCSAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlw ZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4KCQkJICAgPG1ldGEgaHR0cC1l cXVpdj0iQ29udGVudC1MYW5ndWFnZSIgY29udGVudD0iZnIiPgoJCQkgICA8dGl0bGU+TW9uIG1l c3NhZ2UgdGVzdC48L3RpdGxlPgoJCQkgIDwvaGVhZD4KCQkJCgkJCSAgPGJvZHk+CgkJCQk8cD5D b250ZW51IGRlIG1vbiBtZXNzYWdlIHRlc3Q8L3A+CQkKCQkJIDwvYm9keT4KCQkJIAoJCTwvaHRt bD4=


Quelles peuvent-être les causes de ce problème, je ne sais pas où chercher ?

Auriez-vous une idée?

Merci d'avance.
Modifié par yann123 (24 Jun 2009 - 10:27)
Essaie sans mettre les balises head, meta, body, etc.

Ca n'a peut-être rien à voir mais je crois que les clients mails le font déjà tout seul, personnellement je ne le fais jamais et je reçois les mails correctement.
Salut,

Tu peux aussi essayer d'envoyer en iso-8859-1 plutôt qu'en UTF-8 (je me demande si tu ne dois pas utiliser mb_send_mail() pour ce dernier)
J'ai refais mon formulaire en m'inspirant de ce tutoriel d'un autre site:
http://a-pellegrini.developpez.com/tutoriels/php/mail/

Cependant ça ne marche toujours pas.
Je veux envoyer le mail aux formats text et HTML.

Voici la partie du code qui envois le mail.

Voyez vous ce qui ne va pas, manque t-il quelques chose ?


/* Destinataire (votre adresse e-mail) */
$to = 'moi@free.fr';
		
$message_texte = 'Bonjour,'."\r\n\r\n";
$message_texte .= $message . "\r\n";
		
		
$message_html = '<html>'."\r\n";
$message_html .= '<head>'."\r\n";
$message_html .= '<title>Le titre de mon message</title>'."\r\n";
$message_html .= '</head>'."\r\n";
$message_html .= '<body><p>' . $message . '</p></body>'."\r\n";
$message_html .= '</html>'."\r\n";
		
//Genere la frontiere du mail entre texte et html
$boundary = md5(uniqid(microtime(), TRUE));
		
// En-têtes de l'e-mail		
$headers = 'From: '.$nom.' <'.$expediteur.'>'."\r\n\r\n";
$headers .= 'Mime-Version: 1.0'."\r\n";
$headers .= 'Content-Type: multipart/alternative; boundary="'.$boundary.'"'."\r\n";
$headers .= "\r\n";
		
// Le message texte.
$msg .= $message_texte."\r\n\r\n";
	
// Le message html.
$msg .= '--'.$boundary."\r\n";		
$msg .= 'Content-type: text/html; charset=utf-8'."\r\n\r\n";
$msg .= $message_html."\r\n";		
		
$msg .= '--'.$boundary."\r\n";		
		
/* Envoi de l'e-mail */
if (mail($to, $sujet, $msg, $headers))
{
	$alert = 'E-mail envoyé avec succès';
			
	/* On créé un cookie de courte durée (ici 120 secondes) pour éviter de renvoyer un mail en rafraichissant la page */
	setcookie("sent", "1", time() + 120);
			
	/* On détruit la variable $_POST */
	unset($_POST);
}
else
{
	$alert = 'Erreur d\'envoi de l\'e-mail';
}
 


En local je recois le mail vide. (page blanche)

En ligne, je reçoi ceci:

a écrit :

Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="71d1264cb5c2479c1e3f2a3b1885253f"

Mime-Version: 1.0
Content-Transfer-Encoding: BASE64

Qm9uam91ciwNCg0KdGVzdA0KDQoNCi0tNzFkMTI2NGNiNWMyNDc5YzFlM2YyYTNiMTg4NTI1M2YN
CkNvbnRlbnQtdHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04DQoNCjxodG1sPg0KPGhlYWQ+
DQo8dGl0bGU+TGUgdGl0cmUgZGUgbW9uIG1lc3NhZ2U8L3RpdGxlPg0KPC9oZWFkPg0KPGJvZHk+
PHA+dGVzdDwvcD48L2JvZHk+DQo8L2h0bWw+DQoNCi0tNzFkMTI2NGNiNWMyNDc5YzFlM2YyYTNi
MTg4NTI1M2YNCg==


a écrit :

Essaie sans mettre les balises head, meta, body, etc.

Ca n'a peut-être rien à voir mais je crois que les clients mails le font déjà tout seul, personnellement je ne le fais jamais et je reçois les mails correctement.


Le résultat est le même.

a écrit :

Tu peux aussi essayer d'envoyer en iso-8859-1 plutôt qu'en UTF-8 (je me demande si tu ne dois pas utiliser mb_send_mail() pour ce dernier)


Mon site est entiérement en utf_8, j'utilise "mbstring.internal_encoding = UTF-8" dans mon php.ini ce qui évite de gérer les mb_ devant les fonctions.

Merci
Modifié par yann123 (23 Jun 2009 - 15:14)
Salut Yann123,

J'ai fait une fonction qui permet d'envoyer un mail, je vais mettre le code, peut être que ça t'aideras un peu.


function envoiMailling($mailClient, $mailSubject, $mailBody, $piece_jointe="")
	{

		require_once(dirname(__FILE__).'/'. ThirdpartyDirectory .'/'.PHPMailer.'/'.PHPMailerVersion.'/class.phpmailer.php' );
	
		  $mail = new PHPMailer();
		  $mail->IsSMTP(); // telling the class to use SMTP
		  $mail->IsHTML(true);
		  $mail->Host = MailHost ; // SMTP server
		  $mail->Port = MailSmtpPort ;
		  $mail->From = ($mailFrom=="") ? MailFrom : $mailFrom;
		  $mail->FromName = ($mailFromName=="") ? MailFromName : $mailFromName;
		  $mail->AddAddress($mailClient) ;
			
		if ($piece_jointe !="")
		{
			$piece_jointe = 'piece.pdf';
			echo 'test : '.$piece_jointe;
			$mail->AddAttachment($GLOBALS['repertoire_piece_jointe'].$piece_jointe);
		}
		
		  $mail->Subject =  $mailSubject ;
		  $mail->Body =  html_entity_decode($mailBody) ;
		  $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test<br>  

		  if(!$mail->Send())
		  {
			return false ;
		  } 
		  else 
		  {
			return true ;
		  }
	}


Pour remplir le mail, je me sert des données de ma base de données.


$mail = strtolower(trim($aDatamail['mail']));
							$aSuiviClient['mail'] = $mail ;
							$mailClient = strtolower(trim($aDatamail['mail'])) ;
							$mailSubject = $aDatamail2['mail_subject'] ;
							$mailBody = $aDatamail2['mail_body_html'];
							$mailBody = str_replace("[mail]",$aDatamail['mail'],$mailBody);
							$mailBody = str_replace("[civilite]",$aDatamail['civilité'],$mailBody);
							
							$piece_jointe="";
							if ($aDatamail2['piece_jointe'] != "")
							{
								$piece_jointe=$aDatamail2['piece_jointe'];
							}
							echo $piece_jointe;
							if ( $aDatamail['civilité'] == 'Monsieur')
							{
								$mailBody = str_replace("[champ1]",'Cher',$mailBody);
							}
							else
							{
								$mailBody = str_replace("[champ1]",'Chère',$mailBody);
							}
							
							//remplissage du mail avec les données de la table
							$mailBody = str_replace("[nom]",$aDatamail['nom'],$mailBody);
							$mailBody = str_replace("[prenom]",$aDatamail['prenom'],$mailBody);
						$bRes = envoiMailling($mailClient, $mailSubject, $mailBody, $piece_jointe) ;


J'espère que mon code te serviras un peu.

Bonne journée.
Modifié par Miala (24 Jun 2009 - 09:30)
Bizarrement mon code fonctionne en tant que fonction. mais pas quand j'envois le mail directement dans le code de ma page.

Pas compris pourquoi. Mais bon de toutes façons, le code allais devenir une fonction au final.

Donc ça marche.

Merci a tous.