Muchos desarrolladores de PHP necesitan enviar correos electrónicos desde su código. La única función PHP que admite esto directamente es mail()
. Sin embargo, no proporciona ninguna ayuda para utilizar funciones populares como cifrado, autenticación, mensajes HTML y archivos adjuntos.
Formatear correctamente el correo electrónico es sorprendentemente difícil. Hay innumerables estándares superpuestos (y conflictivos) que requieren un estricto cumplimiento de reglas de formato y codificación terriblemente complicadas: la gran mayoría del código que encontrará en línea que utiliza la función mail()
directamente es simplemente incorrecto, ¡si no inseguro!
La función PHP mail()
generalmente envía a través de un servidor de correo local, generalmente encabezado por un binario sendmail
en plataformas Linux, BSD y macOS; sin embargo, Windows generalmente no incluye un servidor de correo local; El cliente SMTP integrado de PHPMailer permite el envío de correo electrónico en todas las plataformas sin necesidad de un servidor de correo local. Sin embargo, tenga en cuenta que la función mail()
debe evitarse cuando sea posible; Es más rápido y seguro usar SMTP en localhost.
No caiga en la tentación de hacerlo usted mismo: si no utiliza PHPMailer, hay muchas otras bibliotecas excelentes que debería consultar antes de implementar la suya propia. Pruebe SwiftMailer, Laminas/Mail, ZetaComponents, etc.
Este software se distribuye bajo la licencia LGPL 2.1, junto con el Compromiso de Cooperación GPL. Lea LICENCIA para obtener información sobre la disponibilidad y distribución del software.
PHPMailer está disponible en Packagist (usando versiones semánticas) y la instalación a través de Composer es la forma recomendada de instalar PHPMailer. Simplemente agregue esta línea a su archivo composer.json
:
"phpmailer/phpmailer" : " ^6.9.2 "
o correr
composer require phpmailer/phpmailer
Tenga en cuenta que Composer genera la carpeta vendor
y el script vendor/autoload.php
; no son parte de PHPMailer.
Si desea utilizar la autenticación XOAUTH2, también deberá agregar una dependencia en league/oauth2-client
y el paquete de adaptadores de servicio apropiados en su composer.json
, o echar un vistazo al contenedor SendOauth2 de @decomplexity, especialmente si está utilizando los servicios de Microsoft.
Alternativamente, si no está utilizando Composer, puede descargar PHPMailer como un archivo zip (tenga en cuenta que los documentos y ejemplos no están incluidos en el archivo zip), luego copie el contenido de la carpeta PHPMailer en uno de los directorios include_path
especificados en su configuración de PHP y cargue cada archivo de clase manualmente:
<?php
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer Exception ;
require ' path/to/PHPMailer/src/Exception.php ' ;
require ' path/to/PHPMailer/src/PHPMailer.php ' ;
require ' path/to/PHPMailer/src/SMTP.php ' ;
Si no está utilizando la clase SMTP
explícitamente (probablemente no lo esté), no necesita una línea use
para la clase SMTP. Incluso si no está utilizando excepciones, aún necesita cargar la clase Exception
tal como se usa internamente.
PHPMailer 5.2 (que es compatible con PHP 5.0 - 7.0) ya no es compatible, ni siquiera para las actualizaciones de seguridad. Encontrará la última versión de 5.2 en la rama 5.2 estable. Si está utilizando PHP 5.5 o posterior (que debería usar), cambie a las versiones 6.x.
Los cambios más importantes son que los archivos fuente ahora están en la carpeta src/
y PHPMailer ahora declara el espacio de nombres PHPMailerPHPMailer
. Esto tiene varios efectos importantes: lea la guía de actualización para obtener más detalles.
Si bien instalar todo el paquete manualmente o con Composer es simple, conveniente y confiable, es posible que desees incluir solo archivos vitales en tu proyecto. Como mínimo necesitarás src/PHPMailer.php. Si estás usando SMTP, necesitarás src/SMTP.php, y si estás usando POP antes de SMTP ( ¡muy poco probable!), necesitarás src/POP3.php. Puede omitir la carpeta de idioma si no muestra errores a los usuarios y puede conformarse con errores de solo inglés. Si está utilizando XOAUTH2 necesitará src/OAuth.php así como las dependencias de Composer para los servicios con los que desea autenticarse. ¡Realmente es mucho más fácil usar Composer!
<?php
//Import PHPMailer classes into the global namespace
//These must be at the top of your script, not inside a function
use PHPMailer PHPMailer PHPMailer ;
use PHPMailer PHPMailer SMTP ;
use PHPMailer PHPMailer Exception ;
//Load Composer's autoloader
require ' vendor/autoload.php ' ;
//Create an instance; passing `true` enables exceptions
$ mail = new PHPMailer ( true );
try {
//Server settings
$ mail -> SMTPDebug = SMTP :: DEBUG_SERVER ; //Enable verbose debug output
$ mail -> isSMTP (); //Send using SMTP
$ mail -> Host = ' smtp.example.com ' ; //Set the SMTP server to send through
$ mail -> SMTPAuth = true ; //Enable SMTP authentication
$ mail -> Username = ' [email protected] ' ; //SMTP username
$ mail -> Password = ' secret ' ; //SMTP password
$ mail -> SMTPSecure = PHPMailer:: ENCRYPTION_SMTPS ; //Enable implicit TLS encryption
$ mail -> Port = 465 ; //TCP port to connect to; use 587 if you have set `SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS`
//Recipients
$ mail -> setFrom ( ' [email protected] ' , ' Mailer ' );
$ mail -> addAddress ( ' [email protected] ' , ' Joe User ' ); //Add a recipient
$ mail -> addAddress ( ' [email protected] ' ); //Name is optional
$ mail -> addReplyTo ( ' [email protected] ' , ' Information ' );
$ mail -> addCC ( ' [email protected] ' );
$ mail -> addBCC ( ' [email protected] ' );
//Attachments
$ mail -> addAttachment ( ' /var/tmp/file.tar.gz ' ); //Add attachments
$ mail -> addAttachment ( ' /tmp/image.jpg ' , ' new.jpg ' ); //Optional name
//Content
$ mail -> isHTML ( true ); //Set email format to HTML
$ mail -> Subject = ' Here is the subject ' ;
$ mail -> Body = ' This is the HTML message body <b>in bold!</b> ' ;
$ mail -> AltBody = ' This is the body in plain text for non-HTML mail clients ' ;
$ mail -> send ();
echo ' Message has been sent ' ;
} catch ( Exception $ e ) {
echo " Message could not be sent. Mailer Error: { $ mail -> ErrorInfo }" ;
}
Encontrarás muchas cosas con las que jugar en la carpeta de ejemplos, que cubre muchos escenarios comunes, incluido el envío a través de Gmail, la creación de formularios de contacto, el envío a listas de correo y más.
Si está reutilizando la instancia (por ejemplo, al enviarla a una lista de correo), es posible que deba borrar la lista de destinatarios para evitar enviar mensajes duplicados. Consulte el ejemplo de la lista de correo para obtener más orientación.
Eso es todo. ¡Ahora deberías estar listo para usar PHPMailer!
PHPMailer está predeterminado en inglés, pero en la carpeta de idiomas encontrará muchas traducciones de los mensajes de error de PHPMailer que pueda encontrar. Sus nombres de archivo contienen el código de idioma ISO 639-1 para las traducciones, por ejemplo fr
para francés. Para especificar un idioma, debe indicarle a PHPMailer cuál usar, así:
//To load the French version
$ mail -> setLanguage ( ' fr ' , ' /optional/path/to/language/directory/ ' );
Damos la bienvenida a correcciones y nuevos idiomas: si está buscando correcciones, ejecute el script Language/TranslationCompletenessTest.php en la carpeta de pruebas y mostrará las traducciones que faltan.
Empiece a leer en la wiki de GitHub. Si tiene problemas, consulte la guía de solución de problemas, ya que se actualiza con frecuencia.
Se pueden encontrar ejemplos de cómo utilizar PHPMailer para escenarios comunes en la carpeta de ejemplos. Si buscas un buen punto de partida, te recomendamos empezar con el ejemplo de Gmail.
Para reducir la huella del código implementado de PHPMailer, no se incluyen ejemplos si carga PHPMailer a través de Composer o mediante la descarga del archivo zip de GitHub, por lo que deberá clonar el repositorio de git o usar los enlaces anteriores para acceder a los ejemplos directamente.
La documentación API completa generada está disponible en línea.
Puede generar documentación completa a nivel de API ejecutando phpdoc
en la carpeta de nivel superior, y la documentación aparecerá en la carpeta docs
, aunque necesitará tener PHPDocumentor instalado. Es posible que las pruebas unitarias le resulten una buena referencia sobre cómo realizar diversas operaciones, como el cifrado.
Si la documentación no cubre lo que necesita, busque las muchas preguntas en Stack Overflow y, antes de hacer una pregunta sobre "Error SMTP: no se pudo conectar al host SMTP", lea la guía de solución de problemas.
Las pruebas de PHPMailer utilizan PHPUnit 9, con un polyfill para permitir que las pruebas de estilo 9 se ejecuten en versiones anteriores de PHPUnit y PHP.
Si esto no pasa, ¿hay algo que puedas hacer para ayudar?
Divulgue cualquier vulnerabilidad encontrada de manera responsable: informe los problemas de seguridad a los mantenedores de forma privada.
Consulte SEGURIDAD y los avisos de seguridad de PHPMailer en GitHub.
Envíe informes de errores, sugerencias y solicitudes de extracción al rastreador de problemas de GitHub.
Estamos particularmente interesados en solucionar casos extremos, ampliar la cobertura de las pruebas y actualizar las traducciones.
Si encontró un error en los documentos o desea agregar algo, continúe y modifique la wiki; cualquiera puede editarla.
Si tiene clones de git anteriores a la migración a la organización PHPMailer GitHub, deberá actualizar cualquier URL remota que haga referencia a la antigua ubicación de GitHub con un comando como este desde su clon:
git remote set-url upstream https://github.com/PHPMailer/PHPMailer.git
No utilices más los proyectos SourceForge o Google Code; están obsoletos y ya no se mantienen.
El tiempo de desarrollo y los recursos para PHPMailer los proporciona Smartmessages.net, el único sistema de marketing por correo electrónico del mundo que prioriza la privacidad.
Las donaciones son bienvenidas, ya sea en cerveza, camisetas o dinero en efectivo. El patrocinio a través de GitHub es una forma sencilla y conveniente de decir "gracias" a los mantenedores y contribuyentes de PHPMailer: simplemente haga clic en el botón "Patrocinador" en la página del proyecto. Si su empresa utiliza PHPMailer, considere participar en el programa de soporte empresarial de Tidelift.
Disponible como parte de la suscripción Tidelift.
Los mantenedores de PHPMailer y miles de otros paquetes están trabajando con Tidelift para brindar soporte comercial y mantenimiento para los paquetes de código abierto que utiliza para crear sus aplicaciones. Ahorre tiempo, reduzca el riesgo y mejore la salud del código, mientras paga a los encargados del mantenimiento de los paquetes exactos que utiliza. Obtenga más información.
Ver registro de cambios.
coolbru
en SF) y Andy Prevost ( codeworxtech
) se hicieron cargo del proyecto en 2004.