web-dev-qa-db-fra.com

Impossible d'envoyer un e-mail avec les caractères corrects avec PHPMailer

J'essaie d'envoyer un courrier électronique avec la classe PHPmailer, mais le code HTML que j'envoie est vide ou les caractères ne sont pas configurés et sans accent.

<?php
header("Content-Type: text/html; charset=ISO-8859-1", true);
require_once('class.phpmailer.php');
include "config.php";

$nome = trim($_POST['nome']);
$email  = trim($_POST['Imail']);
$usuario = trim($_POST['usuario']);
$senha = trim($_POST['senha']);
$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch

$mail->IsSMTP(); // telling the class to use SMTP

try {
  $mail->AddAddress($email, $nome);
  $mail->SetFrom('[email protected]', 'Conectfarma');
  $mail->AddReplyTo('[email protected]', 'Conectarma');
  $subject = 'Guia Rápido de Interações Medicamentosas';
  $sendsubject= "=?utf-8?b?".base64_encode($subject)."?=";
  $mail->Subject = $sendsubject;
 $mensagem  = "<!DOCTYPE html>
<html>
<body>
Bem vindo ao Guia Rápido de Interações Medicamentosas em Neurologia e Psiquiatria
Seu Login e Senha para acesso ao aplicativo são:\n
Login:"  .$nome. "\n, Senha : " .$senha.
"\nAtenciosamente,
Conectfarma Publicações Científicas
</body>
</html>";

  $mail->Body = $mensagem;
  //$mail->CreateBody($mensagem);
  $mail->IsHTML(true);
  $mail->Send();
  //$mail->CharSet="UTF-8";
  echo "<!DOCTYPE html>
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
<title>Confirmação</title>
</head>
<body>
Não vai maçã.
</body>
</html>
";
} catch (phpmailerException $e) {
  echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
  echo $e->getMessage(); //Boring error messages from anything else!
}
        }
    }
}

?>

J'ai sauté la configuration SMTP parce qu'il fonctionne correctement.

12
darkman

Vérifiez bien votre code PHP est également encodé en UTF-8.

Décommentez la ligne //$mail->CharSet="UTF-8"; et déplacez-la idéalement juste après la $mail = new PHPMailer(true);, ainsi le code ressemblerait à ceci:

// ...
$mail = new PHPMailer(true);
$mail->CharSet = "UTF-8";
// ...

Dans votre code, il est appelé après la $mail->Send(); et le paramètre charset n'a pas été pris en compte ...

36
shadyyx

Oui, juste après le "nouveau PHPMailer (true);". J'ai eu le même problème avec:

$mail = new PHPMailer(true);
try {
    $mail->setLanguage('fr', 'inc'.DIRECTORY_SEPARATOR.'PHPMailer'…);
    $mail->CharSet = 'UTF-8';

et passer à:

$mail = new PHPMailer(true);
$mail->CharSet = 'UTF-8';
try {
    $mail->setLanguage('fr', 'inc'.DIRECTORY_SEPARATOR.'PHPMailer'…);

résolu le problème des accents.

0
Michel D