Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cant send email with correct characters with PHPMailer

I'm trying to send a e-mail with the PHPmailer class, but the html i send, is empty, or the characters are unconfigured, and without accents.

<?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!
}
        }
    }
}

?>

I jumped the SMTP configuration because its working properly.

like image 803
darkman Avatar asked Dec 19 '12 16:12

darkman


People also ask

Is PHPMailer SMTP?

PHPMailer can use a non-local mail server (SMTP) if you have authentication. Further advantages include: It can print various kinds of error messages in more than 40 languages when it fails to send an email. It has integrated SMTP protocol support and authentication over SSL and TLS.

Why does PHPMailer go to spam?

usually this happens because the sending server is already marked as spam by somebody. The way i found is go to the gmail account mark the item as 'important' in gmail and 'Add to Safe senders' in Outlook.

How many emails can I send with PHPMailer?

Its called SMTP Relays and it is defined on a per (sending) email basis but usually defaults to 250.


2 Answers

Double check Your PHP code is also in UTF-8 encoding.

Uncomment the line //$mail->CharSet="UTF-8"; and move it idealy right after the $mail = new PHPMailer(true);, so the code would look like:

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

In Your code it is called after the $mail->Send(); thus the charset setting did not take in count...

like image 58
shadyyx Avatar answered Sep 18 '22 18:09

shadyyx


Yes, right after the "new PHPMailer(true);". I had the same problem with:

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

and changing to:

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

solved the accents problem.

like image 28
Michel D Avatar answered Sep 18 '22 18:09

Michel D