Este artículo ya se encuentra obsoleto.
Para una referencia actual leer: Enviar email con PHP y evitar que sea marcado como SPAM
PHPMailer es una clase escrita en PHP que facilita el envío de correo, añadiendo facilidad en el envío de correos con adjuntos, en formato HTML y con diferentes codificaciones, soporte para imagenes embebidas, headers personalizados y además funciona con múltiples servidores de correo.
Típicamente para el envío de correo con PHP se utiliza la función mail(), pero esta función tiene varias limitaciones, por ejemplo que no soporta el envío de adjuntos. Entonces PHPMailer nos viene a facilitar este trabajo que de otra forma seria muy engorroso. Viene con un conjunto de métodos que nos ayudarán en el envió de emails.
Empezando
El primer paso es descargar PHPMailer, aquí encontraremos dos archivos: class.phpmailer.php el cual contiene las funciones para el envío de correo y class.smtp.php para enviar correo mediante servidores SMTP.
Creamos un nuevo documento PHP en donde incluimos la clase y luego creamos una instancia de la clase para utilizarla mas adelante.
Propiedades del Mensaje
El siguiente paso es asignar las propiedades del correo que vamos a enviar como el servidor de correo, subject y From. Luego con el método AddAddress asignamos a quien o quienes vamos a enviar el correo, también se puede utilizar AddCC y AddBCC para las copias y copias ocultas:
$mail->Host = "localhost"; $mail->From = "remite@email.com"; $mail->FromName = "Nombre del Remitente"; $mail->Subject = "Subject del correo"; $mail->AddAddress("destino1@correo.com","Nombre 01"); $mail->AddAddress("destino2@correo.com","Nombre 02"); $mail->AddCC("usuariocopia@correo.com"); $mail->AddBCC("usuariocopiaoculta@correo.com");
Cuerpo del Mensaje
Hasta aquí hemos utilizado las funciones básicas de correo, pero ahora viene la parte del cuerpo del mensaje. Podemos enviar correo en formato HTML e incluso definir un texto que se mostrará si es que el lector de correo no soporta HTML.
$body = "Hola amigo
"; $body .= "probando PHPMailer.
"; $body .= "Saludos"; $mail->Body = $body; $mail->AltBody = "Hola amigo\nprobando PHPMailer\n\nSaludos";
Agregar Archivos Adjuntos
Ahora si deseamos añadir un archivo adjunto a nuestro mensaje utilizamos el método AddAttachment el cual recibe dos parámetros, el primero es la ruta del archivo que vamos a incluir y el segundo es el nombre que se va a mostrar en el correo para este archivo.
$mail->AddAttachment("images/foto.jpg", "foto.jpg"); $mail->AddAttachment("files/demo.zip", "demo.zip");
Finalizando
Finalmente el envío del correo se hace con la función send(). Entonces uniendo todas las partes de nuestro código tenemos:
require("class.phpmailer.php"); $mail = new PHPMailer(); $mail->Host = "localhost"; $mail->From = "remite@email.com"; $mail->FromName = "Nombre del Remitente"; $mail->Subject = "Subject del correo"; $mail->AddAddress("destino1@correo.com","Nombre 01"); $mail->AddAddress("destino2@correo.com","Nombre 02"); $mail->AddCC("usuariocopia@correo.com"); $mail->AddBCC("usuariocopiaoculta@correo.com"); $body = "Hola amigo
"; $body .= "probando PHPMailer.
"; $body .= "Saludos"; $mail->Body = $body; $mail->AltBody = "Hola amigo\nprobando PHPMailer\n\nSaludos"; $mail->AddAttachment("images/foto.jpg", "foto.jpg"); $mail->AddAttachment("files/demo.zip", "demo.zip"); $mail->Send();
Si probamos este mensaje obtendremos el siguiente resultado en nuestra cuenta de correo en el cual notamos el mensaje en HTML y los archivos adjuntos.
Desde luego que hemos utilizado solo las funciones básicas, hay muchas más opciones con las cuales se puede personalizar completamente el mensaje que enviamos, puedes encontrar un referencia de estas opciones en: http://phpmailer.sourceforge.net/docs/. Finalmente les dejo los archivos de este ejemplo funcionando para que lo prueben.
Comentarios Total 207 comentarios
Publicado: 05/06/2012 2:29 pm
hola unijimpe, tus tutoriales son super accesibles para gente que recién empieza como yo, pero estoy complicada para hacer funcionar mi formulario. Es bastante grande y estoy trabaja realmente. te lo paso y si podes darme una mano sería genial. a lo ultimo la gente tiene que poder adjuntar un curriculum (.doc / .pdf) y ese archivo debería llegar adjunto por mail donde el cuerpo del mail contenga toda la data del formulario.
http://www.institutosmas.com/bolsadetrabajo.php
GRACIAS!!!
Publicado: 22/11/2012 3:01 am
a mi me sale esto Deprecated: Function set_magic_quotes_runtime() is deprecated in C:\wamp\www\honda facturacion\PHPMailer_v5.1\class.phpmailer.php on line 1471
Publicado: 24/11/2012 5:12 pm
amigos no consigo hacer mandar un correo a gmail con la clase phpmailer
tengo el archivo enviar.php
pero no se como configurar el class.phpmailer ni el class.smtp tambien tengo el fichero class.pop3.php
una ayudadita por fabor haber quien a conseguido enviar un correo a gmail
Publicado: 08/04/2013 12:57 pm
tengo un problema con este codigo
IsSMTP();
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com";
$mail->Port = 465;
$mail->Username = "alguien@gmail.com";
$mail->Password = "algo";
try {
$mail->From = "alguien@gmail.com";
$mail->FromName = "Web";
$mail->Subject = "Subject del Email";
$mail->AltBody = "Hola, te doy mi nuevo numero\nxxxx.";
if(!$mail->Send()) {
echo "Error: " . $mail->ErrorInfo;
} else {
echo "Mensaje enviado correctamente";
}
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
?>
donde carajo esta el problema??? ya no se que estoy haciendo mal! jajaja gracias!
Publicado: 17/10/2013 12:22 pm
Hola solo queria agradeser por tu ejemplo me funciono de maravilla
Publicado: 02/01/2014 9:52 am
Señores alguien tendrá info de como funciona phpmailer con FREEPBX (Asterisk) para el emvió de correo por VOICEMAIL.
Publicado: 22/11/2014 7:55 am
Hola tengo problemas con mi php mailer, no me envia el correo, quiza haiga un span, me pueden decir el codigo para que llegue el correo.
Mira mi codigo
include_once(«class.phpmailer.php»);
include_once(«class.smtp.php»);
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;
//$mail->SMTPSecure = «ssl»;
$mail->Host = «hosting»;
$mail->Port = 25;
$mail->Username = «mi usuario»;
$mail->Password = «mi contrasena usuario»;
$mail->From = «mi correo»;
$mail->FromName = «de quien es»;
$mail->Subject = $asunto;
$mail->AltBody = «Information of xxxxxx»;
$mail->MsgHTML($mensaje);
$mail->AddAddress($destinatario, «Destinatario»);
$mail->IsHTML(true);
if(!$mail->Send()) {
echo «Error: » . $mail->ErrorInfo;
} else {
echo » Sent message.»;
}
}
yo pienso que asi debe de funcionar, y dice mensaje enviado cuando lo envio, pero no llega nada