web-dev-qa-db-fra.com

Erreur fatale: La classe 'PHPMailer' est introuvable.

  • J'ai essayé: include_once('C:\Inetpub\wwwroot\php\PHPMailer\PHPMailerAutoload.php');

Erreur fatale: la classe 'PHPMailer' est introuvable dans C:\Inetpub\wwwroot\php\index.php à la ligne 151

Je place le PHPMailerAutoload.php dans le même répertoire que mon script.

Quelqu'un peut il m'aider avec ça ?

20
iori

toutes les réponses sont obsolètes maintenant. La version la plus récente (à partir de février 2018) n'a plus de chargement automatique, et PHPMailer devrait être initialisé comme suit:

<?php

  require("/home/site/libs/PHPMailer-master/src/PHPMailer.php");
  require("/home/site/libs/PHPMailer-master/src/SMTP.php");

    $mail = new PHPMailer\PHPMailer\PHPMailer();
    $mail->IsSMTP(); // enable SMTP

    $mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
    $mail->SMTPAuth = true; // authentication enabled
    $mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail
    $mail->Host = "smtp.gmail.com";
    $mail->Port = 465; // or 587
    $mail->IsHTML(true);
    $mail->Username = "xxxxxx";
    $mail->Password = "xxxx";
    $mail->SetFrom("[email protected]");
    $mail->Subject = "Test";
    $mail->Body = "hello";
    $mail->AddAddress("[email protected]");

     if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
     } else {
        echo "Message has been sent";
     }
?>
69
avs099

Ne semble pas que tous les fichiers nécessaires pour utiliser cette classe sont présents. Je recommencerais:

  1. Téléchargez le package à partir de https://github.com/PHPMailer/PHPMailer en cliquant sur le bouton "Télécharger le fichier Zip" dans le coin inférieur droit de la page.
  2. extraire le fichier Zip
  3. téléchargez le dossier de langue class.phpmailer.php, class.pop3.php, class.smtp.php et PHPMailerAutoload.php dans le même répertoire sur votre serveur. J'aime créer un répertoire sur le serveur appelé phpmailer pour le placer tous. de ces en.
  4. Incluez la classe dans votre PHP projet: require_once('phpmailer/PHPMailerAutoload.php');
11
Drew

Ceci répond dans une extension à ce que avs099 a donné ci-dessus, pour ceux qui ont toujours des problèmes:

1. Assurez-vous que php_openssl.dll est installé (sinon, trouvez-le en ligne et installez-le);

2.Allez sur votre php.ini; find extension = php_openssl.dll l'activer/ne pas commenter

3.Allez vers github et avalez la version la plus récente: 6.0 pour le moment.

4. Extrayez la copie principale dans le chemin qui vous convient le mieux (je recommande le même répertoire que le fichier appelant)

Maintenant, copiez ce code dans votre foo-mailer . Php et restituez-le avec vos authentifications gmail stmp.

    require("/PHPMailer-master/src/PHPMailer.php");
    require("/PHPMailer-master/src/SMTP.php");
    require("/PHPMailer-master/src/Exception.php");


    $mail = new PHPMailer\PHPMailer\PHPMailer();
    $mail->IsSMTP(); 

    $mail->CharSet="UTF-8";
    $mail->Host = "smtp.gmail.com";
    $mail->SMTPDebug = 1; 
    $mail->Port = 465 ; //465 or 587

     $mail->SMTPSecure = 'ssl';  
    $mail->SMTPAuth = true; 
    $mail->IsHTML(true);

    //Authentication
    $mail->Username = "[email protected]";
    $mail->Password = "*******";

    //Set Params
    $mail->SetFrom("[email protected]");
    $mail->AddAddress("[email protected]");
    $mail->Subject = "Test";
    $mail->Body = "hello";


     if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
     } else {
        echo "Message has been sent";
     }

Disclaimer: Le propriétaire original du code ci-dessus est avs099 avec juste ma petite entrée.

Prenez note de la supplémentaire:

a) (PHPMailer\PHPMailer), espace de noms: nécessaire pour la résolution des conflits de noms.

b) Le (require ("/ PHPMailer-master/src/Exception.php");): il manquait dans le code d'avs099, donc le problème rencontré par aProgger, vous avez besoin de cette ligne pour indiquer à la classe de courrier où se trouve la classe Exception .

8
RickShaw

Ceci est juste un espace de noms. Regardez les exemples pour référence - vous devez soit utiliser la classe namespaced, soit la référencer de manière absolue, par exemple:

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

//Load composer's autoloader
require 'vendor/autoload.php';
7
Harshi Srivastava

Je vous suggère de chercher à obtenir composer. https://getcomposer.org Composer facilite beaucoup l'obtention de bibliothèques tierces et l'utilisation d'un chargeur automatique unique pour chacun d'entre eux. les dépendances sont localisées, avec quelques capacités d'automatisation.

Télécharger https://getcomposer.org/composer.phar to C:\Inetpub\wwwroot\php

Supprimer votre C:\Inetpub\wwwroot\php\PHPMailer\ répertoire.

Utilisation composer.phar pour obtenir le paquet phpmailer en utilisant la ligne de commande à exécuter

cd C:\Inetpub\wwwroot\php
php composer.phar require phpmailer/phpmailer

Une fois terminé, il créera un C:\Inetpub\wwwroot\php\vendor répertoire avec tous les fichiers phpmailer et générer un autoloader.

Ensuite, dans le fichier de configuration principal de votre projet, vous devez inclure le fichier à chargement automatique.

require_once 'C:\Inetpub\wwwroot\php\vendor\autoload.php';

Le vendor\autoload.php inclura les informations que vous pourrez utiliser $mail = new \PHPMailer;

Des informations supplémentaires sur le package PHPMailer sont disponibles à l’adresse suivante: https://packagist.org/packages/phpmailer/phpmailer

4
fyrye

J'avais le même problème, à l'exception d'une légère différence, la version de PHPMailer 6.0 du bon ami avs099. Je sais que la nouvelle version de PHPMailer depuis février 2018 ne prend pas en charge l'autoload. l’espace de noms dans MVC, je laisse le code à ceux qui en ont besoin.

//Controller
    protected function getLibraryWNS($libreria) {
    $rutaLibreria = ROOT . 'libs' . DS . $libreria . '.php';

    if(is_readable($rutaLibreria)){
        require_once $rutaLibreria;
        echo $rutaLibreria . '<br/>';
    }
    else{
        throw new Exception('Error de libreria');
    }
}

//loginController
    public function enviarEmail($email, $nombre, $asunto, $cuerpo){
    //Import the PHPMailer class into the global namespace
            $this->getLibraryWNS('PHPMailer');
            $this->getLibraryWNS('SMTP');
    //Create a new PHPMailer instance
            $mail = new \PHPMailer\PHPMailer\PHPMailer();
    //Tell PHPMailer to use SMTP
            $mail->isSMTP();
    //Enable SMTP debugging
    //      $mail->SMTPDebug = 0;                                       // 0 = off (for production use),  1 = client messages, 2 = client and server messages  Godaddy POR CONFIRMAR
            $mail->SMTPDebug = 1;                                       // debugging: 1 = errors and messages, 2 = messages only
    //Whether to use SMTP authentication
            $mail->SMTPAuth = true;                                     // authentication enabled
    //Set the encryption system to use - ssl (deprecated) or tls
            $mail->SMTPSecure = 'ssl';                                  //Seguridad Correo Gmail
    //Set the hostname of the mail server
            $mail->Host = "smtp.gmail.com";                             //Host Correo Gmail
    //Set the SMTP port number - 587 for authenticated TLS, a.k.a. RFC4409 SMTP submission
            $mail->Port = 465;      //587;
    //Verifica si el servidor acepta envios en HTML
            $mail->IsHTML(true);
    //Username to use for SMTP authentication - use full email address for gmail
            $mail->Username = '[email protected]';
    //Password to use for SMTP authentication
            $mail->Password = 'tucontraseña';
    //Set who the message is to be sent from
            $mail->setFrom('[email protected]','Creador de Páginas Web');
            $mail->Subject = $asunto;
            $mail->Body = $cuerpo;
    //Set who the message is to be sent to
            $mail->addAddress($email, $nombre);
    //Send the message, check for errors
    if(!$mail->Send()) {
        echo "Mailer Error: " . $mail->ErrorInfo;
        return false;
    } else {
        echo "Message has been sent";
        return true;
    }
1
Edgard Hinostroza
Just download composer and install phpMailler autoloader.php

https://github.com/PHPMailer/PHPMailer/blob/master/composer.json

once composer is loaded use below code:

    require_once("phpMailer/class.phpmailer.php");
    require_once("phpMailer/PHPMailerAutoload.php");

    $mail = new PHPMailer(true); 
            $mail->SMTPDebug = true;
            $mail->SMTPSecure = "tls";
            $mail->SMTPAuth   = true;
            $mail->Username   = 'youremail id';
            $mail->Password   = 'youremail password';
            $mail_from        = "youremail id";
            $subject          = "Your Subject";
            $body             = "email body";
            $mail_to          = "receiver_email";
            $mail->IsSMTP(); 
            try {
                  $mail->Host= "smtp.your.com";
                  $mail->Port = "Your SMTP Port No";// ssl port :465, 
                  $mail->Debugoutput = 'html';
                  $mail->AddAddress($mail_to, "receiver_name");
                  $mail->SetFrom($mail_from,'AmpleChat Team'); 
                  $mail->Subject = $subject;
                  $mail->MsgHTML($body);
                  $mail->Send();
                 $emailreturn = 200;
                } catch (phpmailerException $e) {
                  $emailreturn = $e->errorMessage();             
                } catch (Exception $e) {
                 $emailreturn = $e->getMessage();
                }
    echo $emailreturn;

J'espère que cela fonctionnera.

0
Deepak Singh

J'ai eu un certain nombre d'erreurs similaires à celle-ci. Assurez-vous que votre adresse email setFrom est valide dans $mail->setFrom()

0
Sanjoy

À la lecture de ce que vous avez écrit, vous devrez également ajouter le fichier class.phpmailer.php à votre répertoire.

0
Calvin K

PHPMailerAutoload doit être dans le même dossier que class.phpmailer.php

Ceci est le code PHPMailerAutoload que je suppose comme ceci:

 $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php';
0