Cielmonbivouac
-
7 févr. 2023 à 11:06
yg_be
Messages postés23446Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention26 janvier 2025
-
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 :