Bonjour,

Je n'arrive pas à encoder en UTF-8 malgré que je pense ne pas avoir fait d'erreur:

Mon formulaire

<?php
require 'vendor/autoload.php';
require 'PHPMailer/src/PHPMailer.php';
require 'PHPMailer/src/SMTP.php';
require 'PHPMailer/src/Exception.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$dotenv = Dotenv\Dotenv::createImmutable(__DIR__);
$dotenv->load();

$mail = new PHPMailer(true);

try {

    $mail->isSMTP();
    $mail->Host = $_ENV['MAIL_HOST'];
    $mail->Port = $_ENV['MAIL_PORT'];
    $mail->SMTPAuth = true;
    $mail->Username = $_ENV['MAIL_USERNAME'];
    $mail->Password = $_ENV['MAIL_PASSWORD'];
    $mail->SMTPSecure = $_ENV['MAIL_ENCRYPTION'];

    $to = $_ENV['MAIL_USERNAME'];
    $mail->addAddress($to);

    $name = htmlspecialchars($_POST['name']);
    $email = htmlspecialchars($_POST['email']);
    $url = htmlspecialchars($_POST['url']);
    $ville = htmlspecialchars($_POST['ville']);
    $subject = htmlspecialchars($_POST['subject']);
    $message = htmlspecialchars($_POST['message']);
    $message = nl2br($message);

    $objet = 'Courrier pour la demande de chanteur';
    $codehtml =
        '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<h3>Courrier pour la demande de chanteur</h3>
<p></p>
<p>Nom complet: ' . $name . '</p>
<p>E-mail: ' . $email . '</p>
<p>Ville: ' . $ville . '</p>
<p>Sujet: ' . $subject . '</p>
<p>Message:<br><br> ' . $message . '</p>
<p>URL vid&eacute;o: ' . $url . '</p>
</body></html>';

    $headers = 'From:' . $siteTitle . "\r\n";
    $headers .= 'Bcc:' . $emailAdministrator . "\r\n";
    $headers .= 'Reply-To:' . $noreply . "\r\n";
    $headers .= 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-Type: text/html; charset=UTF-8' . "\r\n";
    $headers .= 'Content-Transfer-Encoding: 8bit';

    $mail->isHTML(true);
    $mail->Subject = $subject;
    $mail->Body = $codehtml;
    $mail->AltBody = strip_tags($message); 

    $mail->send();
    echo 'L\'email a été envoyé avec succès.';
} catch (Exception $e) {
    echo 'Une erreur s\'est produite lors de l\'envoi de l\'email : ', $e->getMessage();
}

et ma balise form

<form id="contactForm" name="sentMessage" novalidate="novalidate" method="post" accept-charset="UTF-8">

les mails arrivent mal encodés : à çé etc.

Je vous remercie pour votre aide

3 réponses


Carouge10
Réponse acceptée

Bonjour,
Essayer un ajoutant le charset à phpmailer
$mail->CharSet = 'UTF-8';

A quoi sert $hearders ? si ce n'est pas pour s'en servir

barpoi78
Auteur

Merci ça fonctionne bien et je n'avais pas fais gaffe pour les $headers à force de tester.

avec plaisir