web-dev-qa-db-fra.com

PHPMAILER N'envoie pas et ne donne pas d'erreur

J'essaie de laisser les utilisateurs remplir un formulaire de contact, qui sera ensuite envoyé à mon email. Mais cela ne fonctionne pas pour une raison quelconque. Je reçois simplement une page vierge sans message d'erreur ou aucun texte et e-mail n'est également envoyé.

if (isset($_POST['submit']))
{
    include_once('class.phpmailer.php');

    $name = strip_tags($_POST['full_name']);
    $email = strip_tags ($_POST['email']);
    $msg = strip_tags ($_POST['description']);

    $subject = "Contact Form from DigitDevs Website";

    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->CharSet = 'UTF-8';

    $mail->Host       = "mail.example.com"; // SMTP server example
    //$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->Port       = 26;                    // set the SMTP port for the GMAIL server
    $mail->Username   = "[email protected]"; // SMTP account username example
    $mail->Password   = "password";        // SMTP account password example

    $mail->From = $email;
    $mail->FromName = $name;

    $mail->AddAddress('[email protected]', 'Information'); 
    $mail->AddReplyTo($email, 'Wale');

    $mail->IsHTML(true);

    $mail->Subject = $subject;

    $mail->Body    =  $msg;
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    if(!$mail->Send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
    exit;
}
echo 'Message has been sent';
13
Wale

Son fonctionnement maintenant, je n'ai pas inclus le fichier "class.smtp.php". Le code de travail est ci-dessous:

 if (isset($_POST['submit']))
{
 include_once('class.phpmailer.php');

 require_once('class.smtp.php');

$name = strip_tags($_POST['full_name']);
$email = strip_tags ($_POST['email']);
$msg = strip_tags ($_POST['description']);

$subject = "Contact Form from DigitDevs Website";

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';

$mail->Host       = "mail.example.com"; // SMTP server example
//$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
$mail->SMTPAuth   = true;                  // enable SMTP authentication
$mail->Port       = 26;                    // set the SMTP port for the GMAIL server
$mail->Username   = "[email protected]"; // SMTP account username example
$mail->Password   = "password";        // SMTP account password example

$mail->From = $email;
$mail->FromName = $name;

$mail->AddAddress('[email protected]', 'Information'); 
$mail->AddReplyTo($email, 'Wale');

$mail->IsHTML(true);

$mail->Subject = $subject;

$mail->Body    =  $msg;
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->Send()) {
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
exit;
}
 echo 'Message has been sent';
14
Wale

Vous devez appeler:

$mail = new PHPMailer(true); // with true in the parenthesis

De la documentation:

Le paramètre true signifie qu'il lèvera des exceptions sur les erreurs, que nous devons intercepter.

14
user3670588

J'ai eu le même problème sans message d'erreur, même avec SMTPDebug activé. Après avoir cherché des exemples de travail, j'ai remarqué que je n'avais pas inclus la valeur SMTP Secure. Essayez d'ajouter cette ligne:

$mail->SMTPSecure = 'ssl'; //secure transfer enabled

Travaillez comme un charme maintenant.

6
Syclone

J'avais un problème similaire. En référence à la réponse de @ Syclone. J'utilisais le "tls" par défaut.

$mail->SMTPSecure = 'tls';

Après l'avoir changé en $mail->SMTPSecure = 'ssl'; Ça a marché ! Mon serveur de messagerie n'acceptait que les connexions via SSL.

4
phil

Ce qui a fonctionné pour moi, c'était de définir From comme nom d'utilisateur et FromName comme $ _POST ['email']

J'espère que cela t'aides

2
Raf

J'essayais de charger un fichier HTML à envoyer, qui n'appartenait pas au groupe www-data sur mon serveur Ubuntu.

chown -R www-data * 
chgrp -R www-data *

Problème résolu!

1
Andy

Exception d'utilisation de PHPMailer.

Essaye ça

try {

    include_once('class.phpmailer.php');

    $name = strip_tags($_POST['full_name']);
    $email = strip_tags ($_POST['email']);
    $msg = strip_tags ($_POST['description']);

    $subject = "Contact Form from DigitDevs Website";

    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->CharSet = 'UTF-8';

    $mail->Host       = "mail.example.com"; // SMTP server example
    //$mail->SMTPDebug  = 1;                     // enables SMTP debug information (for testing)
    $mail->SMTPAuth   = true;                  // enable SMTP authentication
    $mail->Port       = 26;                    // set the SMTP port for the GMAIL server
    $mail->Username   = "[email protected]"; // SMTP account username example
    $mail->Password   = "password";        // SMTP account password example

    $mail->From = $email;
    $mail->FromName = $name;

    $mail->AddAddress('[email protected]', 'Information'); 
    $mail->AddReplyTo($email, 'Wale');

    $mail->IsHTML(true);

    $mail->Subject = $subject;

    $mail->Body    =  $msg;
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->Send();

    exit;

} catch (phpmailerException $e) {
  echo $e->errorMessage(); //error messages from PHPMailer
} catch (Exception $e) {
  echo $e->getMessage();
}
1
Bastien D

Je me demandais s'il fallait écrire mon propre gestionnaire ou PHPMailer crow-bar dans ma structure de classe existante. En l'occurrence, cela a été très facile en raison de la polyvalence de la fonction spl_autoload_register qui est utilisée dans le système PHPMailer ainsi que de la structure de classe existante.

J'ai simplement créé un e-mail de classe de base dans ma structure de classe existante comme suit

<?php

   /**
     * Provides link to PHPMailer
     *
     * @author Mike Bruce
     */
   class Email {
      public $_mailer; // Define additional class variables as required by your application
      public function __construct()
      {
         require_once "PHPMail/PHPMailerAutoload.php" ;
         $this->_mailer = new PHPMailer() ;
         $this->_mailer->isHTML(true);
         return $this;
      }
   }
?>

A partir d'une classe Object appelante, le code serait:

$email = new Email;
$email->_mailer->functionCalls();

// continue with more function calls as required

Fonctionne un régal et m'a sauvé de réinventer la roue.

0
Mike M0ITI