Page 1 sur 1

Fonction mail() - Caractères bizarre dans l'URL du corps du message ...

Posté : 11 mars 2022, 08:43
par Thirt
Bonjour à vous,

j'utilise la fonction mail() du PHP pour envoyer un mail.

L'envoi du mail se passe bien mais le format du mail n'est pas tout à fait correct. Par exemple, les paramètres dans l'URL subissent des modifications.
$link = "activation.php?id=" . $user_id . '&e=' . $email . '&ssl=' . $encrypted_pass;
 
$message = '';
$message = '<!DOCTYPE html>';
$message .= '<html>';
$message .= '   <head>';
$message .= '       <meta charset=&quot;UTF-8&quot; />';
$message .= '   </head>';
$message .= '   <body>';
$message .= '       Bienvenue,<br /><br />';
$message .= '       <h2>Il ne vous reste que cette dernière étape pour activer votre compte !</h2>';
$message .= '       <p>';
$message .= '           Pour ce faire, il vous suffit de cliquer sur le lien suivant :<br /><br />';
$message .= '           <a href=&quot;' . $link . '&quot;>' . $link . '</a><br />';
$message .= '   </body>';
$message .= '</html>';
 
$headers = "";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=UTF-8" . "\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable" . "\r\n";
 
// More headers
$headers .= "From: " . $from . "\r\n";
 
if (!mail($to, $subject, $message, $headers))
{
  $mail_status = "Erreur lors de l'envoi du mail !!!";
}
Quand je regarde le contenu du mail, il est affiché ceci :

activation.php?id?&e?245215&ssl248748d218d9f6257c5407b9887e9f74a1ec8f70d746a6a4a4050730b736c00

alors que j'aurais dû avoir ceci :

activation.php?id=88&e=fc245215&ssl=248748d218d9f6257c5407b9887e9f74a1ec8f70d746a6a4a4050730b736c00

Avez-vous une idée de la raison pour laquelle le corps de mon message est modifié ?

Merci d'avance.

Bonne journée,

Thierry

Re: Fonction mail() - Caractères bizarre dans l'URL du corps du message ...

Posté : 11 mars 2022, 09:19
par @rthur
Problème d'encodage très certainement.

Utilise PHPmailer pour envoyer des mails en étant sûr qu'ils soient conformes aux bonnes pratiques, ça permet d'éviter ce genre de problème et surtout de limiter le risque que tes mails HTML soient considérés comme du spam par les principaux fournisseurs de messageries (Gmail, Outlook, Orange, Free...)

Re: Fonction mail() - Caractères bizarre dans l'URL du corps du message ...

Posté : 12 mars 2022, 11:14
par ynx
Bonjour,

Il faut utiliser des vrais guillemets/quotes " pour délimiter la valeur des attributs html et utiliser les entités html tel quel &quot; ou &amp; pour remplacer les caractères réservés dans la valeur d'un attribut ou dans le contenu d'une balise.

Essaye de modifier le code html généré comme ceci :
$link = "activation.php?id=" . urlencode($user_id) . '&e=' . urlencode($email) . '&ssl=' . urlencode($encrypted_pass);

// ...
$message .= '       <meta charset="UTF-8" />';
// ...
$message .= '           <a href="' . htmlspecialchars($link, ENT_QUOTES, 'UTF-8') . '">' . htmlspecialchars($link, ENT_QUOTES, 'UTF-8') . '</a><br />';
Vérifie que le html généré est bien correct en l'affichant dans le navigateur (echo $message) au lieu de l'envoyer par mail.

Pour l'envoi du mail, préfère si possible PHPMailer comme suggéré par @rthur.
Sinon, essaye sans l'entête "Content-Transfer-Encoding: quoted-printable", je doute que celle-ci soit utile et/ou puisse poser problème dans ton cas.