Problème avec PhP Mailer : problème d'encodage

Fermé
Cielmonbivouac - 7 févr. 2023 à 11:06
yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 - 7 févr. 2023 à 12:29

Bonjour à tous,

J'ai un problème assez gênant pour l'envoi de mail via PhP Mailer, puisque les accents et autres codes spéciaux sont codés bizarrement et le mail est difficilement lisible pour les utilisateurs... Peut-être pourrez vous m'aider à régler ce problème ? :-)

Le code est un peu long, donc je vais essayer de le synthétiser le plus possible pour rendre le sujet facile à traiter et vous évitez une lecture trop longue :

1. J'ai une page mail.php qui est appelée lorsque je souhaite envoyé le mail. Il contient le code PhP Mailer. Pour le corps du message, j'ai une variable qui permet d'avoir toujours la même en-tête et le même footer, avec une variable $message_coeur qui va dépendre du mail envoyé.

// include PHP Mailer
  
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

require_once __DIR__ . '/../vendor/phpmailer/phpmailer/src/Exception.php';
require_once __DIR__ . '/../vendor/phpmailer/phpmailer/src/PHPMailer.php';
require_once __DIR__ . '/../vendor/phpmailer/phpmailer/src/SMTP.php';

 function send_mail($to, $from, $subject, $titre_message, $message_coeur, $message_nonHTML){

 	
	// passing true in constructor enables exceptions in PHPMailer
	$mail = new PHPMailer(true);

	try {
		$message_header = '
			<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
			<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office">
			<head>
				<!--[if gte mso 9]>
				<xml>
					<o:OfficeDocumentSettings>
					<o:AllowPNG/>
					<o:PixelsPerInch>96</o:PixelsPerInch>
					</o:OfficeDocumentSettings>
				</xml>
				<![endif]-->
				<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
				<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
			    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
				<meta name="format-detection" content="date=no" />
				<meta name="format-detection" content="address=no" />
				<meta name="format-detection" content="telephone=no" />
				<link href="https://fonts.googleapis.com/css?family=Oswald%3A400%2C700%7CRoboto%3A400%2C400i%2C700%2C700i" rel="stylesheet" />
				<title>Email Template</title> 

[...]';

$message_header_2 =	' [...] ';

$message_footer = ' [...] ' ;

$message = $message_header . $titre_message . $message_header_2 . $message_coeur . $message_footer;

	    // Server settings
	    // $mail->SMTPDebug = SMTP::DEBUG_SERVER; // for detailed debug output
	    $mail->isSMTP();
	    $mail->Host = 'smtp.gmail.com';
	    $mail->SMTPAuth = true;
	    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
	    $mail->Port = 587;

	    $mail->Username = '****************'; // Mail who send by PHPMailer
	    $mail->Password = '***************'; // your pass mail box

	   
	    // Sender and recipient settings
	    $mail->setFrom($from);
	    $mail->addAddress($to);
	    $mail->addReplyTo($from); // to set the reply to

	    // Setting the email content
	    $mail->IsHTML(true);
	    $mail->Subject = $subject;
	    $mail->Body = $message;
	    $mail->AltBody = $message_nonHTML;



	    $mail->send();
	    echo "Email message sent to." . $to;
	} catch (Exception $e) {
	    echo "Error in sending email. Mailer Error: {$mail->ErrorInfo}";
	}
}

2. Cette page est appelée pour chaque envoie d'email. Ici un exemple d'envoi à moi-même pour tester la mise en page d'une newsletter :

include("assets/mail.php");

	$user_name = "Eric";
	$user_mail = "**********@gmail.com";
	$user_id_log = "********";

	$to = "***@***";
	$from = "***@***";
	$subject = $_POST['object'];
	$titre_message = $_POST['titre_message'];
	$message_coeur = $_POST['corps_message'], $user_name, $user_mail));
	$message_coeur = $message_coeur . '</table><table><td style="text-align: center; font-size: 9px; color: grey;"><a style="color: grey;" href="https://www.cielmonbivouac.com/member_board_action.php?newsletter_desinsc=' . $user_id_log . '&mail=' . $user_mail . '">Me désinscrire de la newsletter</a></td>';

	$message_nonHTML = ''; 

	send_mail($to, $from, $subject, $titre_message, $message_coeur, $message_nonHTML);

Avec comme header de la page :

<!DOCTYPE HTML>
<html>
	<head>
		<title>Admin | Gestion des produits</title>
		<meta charset="utf-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
		<link rel="icon" type="image/png" href="images/logo.png" />
		<link rel="stylesheet" href="assets/css/mainstructure.css" />
	</head>

Voilà, j'espère avoir pu être synthétique tout en restant compréhensible. Si vous avez besoin d'infos supplémentaires, surtout, n'hésitez pas !

Merci par avance et une bonne journée !!

Eric L
Windows / Firefox 109.0


Windows / Firefox 109.0

A voir également:

1 réponse

yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
7 févr. 2023 à 12:29

bonjour,

Je ne vois pas la définition du formulaire qui retourne $_POST['corps_message'].  Il est bien défini avec charset=UTF-8?

0