Introducción a PHPMailer
Dado que muchos lo estáis pidiendo me he animado a escribir una pequeña introducción a PHPMailer. Lo primero es descargarnos el archivo con la última versión y descomprimirlo en el directorio de nuestro proyecto, por ejemplo en el directorio phpmailer. Para poder usar PHPMailer basta añadir:
include("phpmailer/class.phpmailer.php");
con la ruta adecuada a PHPMailer.
En este ejemplo, modificación del que aparece en la “web oficial”, se puede ver lo fácil que es usar PHPMailer:
SetLanguage('es','phpmailer/language/'))
{
echo '
No se ha podido cargar el fichero de idioma adecuado.
';
}
// Introducimos la información del remitente del mensaje
$mail->From = "remitente@email.com";
$mail->FromName = "Remitente";
$mail->AddReplyTo("info@site.com","Information");
// y los destinatarios del mensaje. Podemos especificar más de un destinatario
$mail->AddAddress("paco@correo.com","Paco Martínez Soria");
$mail->AddAddress("klaatu@correo.com"); // Como se puede ver aquí el nombre del destinatario es opcional
$mail->AddCC("otrodestinatario@correo.com"); // También podemos enviar con copia de carbón
$mail->AddBCC("destiantaariooculto@correo.com"); // y copia de carbón oculta
// Establecemos los parámetros del mensaje: ancho y formato.
$mail->WordWrap = 50; // ancho del mensaje
$mail->IsHTML(true); // enviar como HTML
// Añadimos el mensaje: asunto, cuerpo del mensaje en HTML y en formato
// solo texto
$mail->Subject = "Asunto del mensaje";
$mail->Body = "Este es el mensaje en formato HTML";
$mail->AltBody = "Y este es el mensaje de solo texto"; // Para los queno pueden recibir en formato HTML
// Añadimos los adjuntos al mensaje
$mail->AddAttachment("/var/tmp/file.tar.gz"); // podemos añadir un adjunto directamente
$mail->AddAttachment("/tmp/image.jpg", "new.jpg"); // O podemos indicar un nuevo nombre para el adjunto.
if(!$mail->Send())
{
echo "El mensaje no se ha podido enviar
";
echo "Error: " . $mail->ErrorInfo;
exit;
}
echo "El mensaje se ha enviado correctamente";
?>
Este ejemplo no funcionaría si el servidor que usarmos es SMTP. En ese caso tendríamos que añadir estas líneas al principio:
$mail->IsSMTP(); // enviar vía SMTP
$mail->Host = "smtp1.site.com;smtp2.site.com"; // Servidores SMTP
$mail->SMTPAuth = true; // activar la identificacín SMTP
$mail->Username = "jswan"; // usuario SMTP
$mail->Password = "secret"; // clave SMTP
Otras funciones interesantes:
- ClearAddresses () – Borra todos los destinatarios del campo ‘TO’, es decir, todos los destinatarios que se han añadido con la función AddAddress.
- ClearAllRecipients () – Borra todos los destinatarios TO, CC y BCC.
- ClearAttachments () – Borra los adjuntos.
Existe información más completa, en inglés, con todas las funciones disponibles en:
http://phpmailer.sourceforge.net/docs/



Junio 28th, 2007 at 11:56 pm
¿Es posible que usando SMTP utilice una cuenta para mandar el correo pero que el remitente (From) sea distinto al de la cuenta usada?
Me explico:
Dado el código:
$mail->IsSMTP(); // enviar vía SMTP
$mail->Host = “smtp1.site.com;smtp2.site.com”; // Servidores SMTP
$mail->SMTPAuth = true; // activar la identificacín SMTP
$mail->Username = “jswan”; // usuario SMTP
$mail->Password = “secret”; // clave SMTP
… poder usar $mail->From = otrousuario@otrosite.com;
Es decir, que el correo no llegue de parte de jswan @ site . com sino de otrousuario@otrositio.com
Si fuera posible ¿es con el método From? Porque lo he probado sin éxito.
Espero haberme explicado.
Más información:
- Usando un servidor compartido Ubuntu Linux
- No tengo idea de cómo funciona un servidor de correos
- Lo que quiero que pase es usar una cuenta de mi dominio para la validación por SMTP, pero usar otra cuenta para que aparezca como remitente.
Gracias!
Junio 29th, 2007 at 8:11 am
Pues creo que sí que es posible. Si no me equivoco yo lo he hecho alguna vez. ¿Cómo sabes que no funciona? ¿porque no llega el mensaje? No estoy seguro pero si no se envía podría deberse a la configuración del servidor (no permite enviar con remitentes de otro dominio) o podría deberse a que el mensaje es identificado como spam.
¿Funciona bien si envías los emails con un “from” que sea del mismo dominio?
Julio 13th, 2007 at 3:23 pm
Hola, necesito tener un formulario de contacto en mi sitio web con 4 o 5 campos pero no tengo servidor de correo y no he entendido mucho esto del phpmailer aunque parece servir bastante, me pueden echar una manito, muchas gracias.
Julio 27th, 2007 at 1:52 pm
Hola,
a mí no me funciona cuando paso una dirección de otro dominio, ejemplo:
$mail->IsSMTP();
$mail->Host = “mail.midominio.com”;
$mail->AddAddress(”correo@midominio.com”);
$mail->AddAddress(”correo2@midominio.com”);
$mail->AddAddress(”correo@otrodominio.com”);
no requiere autentificación, ni siquiera me envía los correos a las direcciones de mi dominio, simplemente comentando la línea del correo del otro dominio funciona perfectamente.
Imagino que será cosa del servidor, les llamaré a ver si me dan una solución y os lo comento…pero me lleva bastante loco que por poner otro dominio deje de funcionar.
Si alguien sabe algo sobre el tema le agradecería toda la ayuda.
Gracias, un saludo.
Septiembre 18th, 2007 at 4:41 pm
Hola. He estado intentando enviar correos con phpmailer y la verdd es que por mas intentos que hago no logro que me salga bien. por favor sí me pueden ayudar se los agradeceria mucho
Octubre 2nd, 2007 at 2:31 am
A mi me tira el siguiente error
Fatal error: Maximum execution time of 30 seconds exceeded in C:\AppServ\www\Dreamweaver\servidor\phpmailer\class.smtp.php on line 1024
Pa mi que tengo todo bien…¿Porque sera?..
…..Gracias
Septiembre 17th, 2009 at 4:19 am
me parece que te faltó instanciar la clase,
$mail=new PHPMailer();