[RESOLU] Balises html dans l'envoi de mail

Eléphant du PHP | 386 Messages

21 sept. 2014, 22:44

Bonjour,

J'utilise une fonction qui permet de faire modifier son mot de passe en cas d'oubli :
function recover($recoverEmail){
	$email = $_POST['recoverEmail'];
	if(preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!",$email)){
		if(!empty($_POST['recoverEmail'])){
			$req = Bdd::connect() -> prepare('SELECT id, nom, prenom, email FROM users WHERE email = :email');
			$req -> execute(array('email' => $email));
			$donnees = $req -> fetch();
			if(!$donnees){
				echo '<span class="error">Aucun compte n\'est associé à cette email :<br />'.$email.'</span>';
			} else {
				$newPass = chaine(8);
				$cryptPass = sha1($newPass);
				$req1 = Bdd::connect()->prepare('UPDATE users SET mdp = :newPass WHERE email = :email');
				$req1 -> execute(array('newPass' => $cryptPass,'email' => $email));
				$req1 -> closeCursor();
				if(preg_match('#@(hotmail|live|msn).[a-z]{2,4}$#', $email)){
					$passage_ligne = "\n";
				} else {
					$passage_ligne = "\r\n";
				}
				$headers  = 'From: Web Astronomie <[email protected]>'.$passage_ligne;
				$headers .= 'Reply-to: Web Astronomie <[email protected]>'.$passage_ligne;
				$headers .= 'MIME-Version: 1.0'.$passage_ligne;
				$headers .= 'Content-Type: multipart/alternative;'.$passage_ligne;
				$sujet    = 'Modification du mot de passe de votre compte Web Astronomie';
				$message .= 'Content-Type: text/html; charset=\'ISO-8859-1\''.$passage_ligne;
				$message .= 'Content-Transfer-Encoding: 8bit'.$passage_ligne;
				$message .= '<table>';
				$message .= '<tr><td>Coucou <strong>Test</strong></td></tr>';
				$message .= '</table>';
				if(mail($email, $sujet, $message, $headers)){
					echo '<span class="success">Un nouveau mot de passe viens de vous être envoyé</span>';
				} else {
					echo '<span class="error">Erreur lors de l\'envoie de votre mot de passe</span>';
				}
			}
			$req -> closeCursor();
		} else {
			echo '<span class="error">Veuillez remplir au moins un champ</span>';
		}
	} else {
		echo '<span class="error">Veuillez entrer une adresse électronique valide</span>';
	}
}
Le problème c'est que dans l'email reçu, je reçois ça :

Code : Tout sélectionner

Content-Type: text/html; charset='ISO-8859-1' Content-Transfer-Encoding: 8bit <table><tr><td>Coucou <strong>Test</strong></td></tr></table>
Et j'aimerais ajouter mon logo et améliorer le design du mail, mais si les balises s'affichent, ça va pas être possible :(

Pourtant je pense avoir rien oublié dans le script.
Merci pour votre aide

Eléphant du PHP | 151 Messages

22 sept. 2014, 08:04

Bonjour,

Ce qui est dommage dans ta fonctuion, c'est que tu fais du joli PDO puis un simple mail pour l'envoi.
Passe par un petit phpmailer, qui te permet de générer ce que tu veux ! (logo, attachment ou pj, formatage par wordwrap, etc...)
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

ynx
Mammouth du PHP | 586 Messages

22 sept. 2014, 12:15

Salut,

En mettant les entêtes dans le contenu du message ca marche moins bien ;)

Remplace ces deux lignes :
$message .= 'Content-Type: text/html; charset=\'ISO-8859-1\''.$passage_ligne;
$message .= 'Content-Transfer-Encoding: 8bit'.$passage_ligne;
$message .= '<table>';
par celles-ci :
$headers .= 'Content-Type: text/html; charset=\'ISO-8859-1\''.$passage_ligne;
$headers .= 'Content-Transfer-Encoding: 8bit'.$passage_ligne;
$message = '<table>';
Bonne journée

Eléphant du PHP | 386 Messages

22 sept. 2014, 13:07

Merci pour vos messages,

Merci à ynx pour mon erreur d'inattention, j'ai même pas calculé la variable $message à changer =D> .
Et arnaud69 je tiens vraiment à tout coder et personnaliser dans mon site :wink: .

Eléphant du PHP | 151 Messages

23 sept. 2014, 09:08

Merci pour vos messages,

Merci à ynx pour mon erreur d'inattention, j'ai même pas calculé la variable $message à changer =D> .
Et arnaud69 je tiens vraiment à tout coder et personnaliser dans mon site :wink: .
Je comprends que tu veuilles coder, mais pourquoi réinventer la roue ?
PhpMailer est à mon gout, un des meilleurs outils d'envoi de mails (ses capacités sont énormes), et c'est aussi une classe libre et facile à utiliser...
Développeur d'applications pour intranets industriels (IHM), DBA Oracle, auto entrepreneur. Je fuis les frameworks car je pense comme Rasmus Lerdorf : "all PHP frameworks suck"...
Je me suis lancé dans la reprise du projet PhpMyNewsletter (GNU GPL), que je vous invite à essayer.

echo ($user=='enregistré?"je t'aide":"je t'aide pas !");

Eléphant du PHP | 386 Messages

23 sept. 2014, 14:56

Oui, je m'en suis rendu compte, et grâce à elle, plus d'envois SPAMS
j'ai changé d'avis ^^

Mais dans le dossier phpmailer, on doit garder quels fichiers ?
Parce que y'en a qui servent à rien ex : "docs","examples","languages","test" ??