Error fatal: no se encontrĂ³ la clase ''PHPMailer''
(10)
Estaba con el mismo problema, excepto con una ligera diferencia, la versión de PHPMailer 6.0, del buen amigo avs099 Sé que la nueva versión de PHPMailer desde febrero de 2018 no es compatible con la carga automática, y tuve un grave problema para crear instancias de las bibliotecas con El espacio de nombres en MVC, dejo el código para aquellos que lo necesitan.
//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;
}
-
Intenté:
include_once(''C:/Inetpub/wwwroot/php/PHPMailer/PHPMailerAutoload.php'');
Error fatal: la clase ''PHPMailer'' no se encuentra en C: / Inetpub / wwwroot / php / index.php en la línea 151
PHPMailerAutoload.php
el
PHPMailerAutoload.php
en el mismo directorio que mi script.
Puede alguien ayudarme con esto ?
Esto es solo espacio de nombres. Mire los ejemplos como referencia: debe usar la clase de espacio de nombres o hacer referencia a ella absolutamente, por ejemplo:
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";
}
Esto responde en una extensión a lo que avs099 ha dado anteriormente, para aquellos que todavía tienen problemas:
1.Asegúrese de que tiene php_openssl.dll instalado (de lo contrario, encuéntrelo en línea e instálelo);
2. Vaya a su php.ini; find extension = php_openssl.dll habilítelo / descomente
3.Vaya a https://github.com/PHPMailer/PHPMailer y https://github.com/PHPMailer/PHPMailer la última versión: 6.0 en este momento.
4.Extraiga la copia maestra en la ruta que funcione mejor para usted (recomiendo el mismo directorio que el archivo de llamada)
Ahora copie este código en su foo-mailer .php y renderícelo con sus autenticaciones de gmail stmp.
use PHPMailer/PHPMailer/PHPMailer;
use PHPMailer/PHPMailer/Exception;
//Load composer''s autoloader
require ''vendor/autoload.php'';
Descargo de responsabilidad: el propietario original del código anterior es avs099 con solo mi pequeña entrada.
Tome nota de lo adicional:
a) Espacio de nombres (PHPMailer / PHPMailer): necesario para la resolución de conflictos de nombres.
b) El (require ("/ PHPMailer-master / src / Exception.php");): faltaba en el código de avs099, por lo tanto, el problema encontrado por aProgger, necesita esa línea para indicarle a la clase de correo dónde está ubicada la clase Exception .
No parece que todos los archivos necesarios para usar esa clase estén presentes. Comenzaría de nuevo:
- Descargue el paquete de https://github.com/PHPMailer/PHPMailer haciendo clic en el botón "Descargar ZIP" en el extremo inferior derecho de la página.
- extraer el archivo zip
- cargar la carpeta de idioma, class.phpmailer.php, class.pop3.php, class.smtp.php y PHPMailerAutoload.php, todo en el mismo directorio en su servidor, me gusta crear un directorio en el servidor llamado phpmailer para colocar todos de estos en.
-
Incluya la clase en su proyecto PHP:
require_once(''phpmailer/PHPMailerAutoload.php'');
Solo de leer lo que ha escrito, necesitará agregar el archivo class.phpmailer.php a su directorio también.
Te sugiero que busques
composer
.
https://getcomposer.org
Composer hace que sea mucho más fácil obtener bibliotecas de terceros y usar un solo cargador automático para todas ellas.
También estandariza la ubicación de todas sus dependencias, junto con algunas capacidades de automatización.
Descargue
https://getcomposer.org/composer.phar
en
C:/Inetpub/wwwroot/php
Elimine su directorio
C:/Inetpub/wwwroot/php/PHPMailer/
.
Use
composer.phar
para obtener el paquete phpmailer usando la línea de comando para ejecutar
cd C:/Inetpub/wwwroot/php
php composer.phar require phpmailer/phpmailer
Una vez finalizado, creará un directorio
C:/Inetpub/wwwroot/php/vendor
junto con todos los archivos phpmailer y generará un autocargador.
A continuación, en el archivo de configuración del proyecto principal, debe incluir el archivo de carga automática.
require_once ''C:/Inetpub/wwwroot/php/vendor/autoload.php'';
El
vendor/autoload.php
incluirá la información para que usted use
$mail = new /PHPMailer;
Puede encontrar información adicional sobre el paquete PHPMailer en https://packagist.org/packages/phpmailer/phpmailer
Todas las respuestas están desactualizadas ahora. La versión más actual (a partir de febrero de 2018) ya no tiene carga automática, y PHPMailer debe inicializarse de la siguiente manera:
<?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";
}
?>
Tuve una serie de errores similares a este.
Asegúrese de que su dirección de correo electrónico setFrom sea válida en
$mail->setFrom()
PHPMailerAutoload
debe estar en la misma carpeta que
class.phpmailer.php
Este es el código
PHPMailerAutoload
que supongo:
$filename = dirname(__FILE__).DIRECTORY_SEPARATOR.''class.''.strtolower($classname).''.php'';
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;
Espero que esto funcione.