•»Sin pelos en la Lengua ► PHP

Enviar correo electrónico con PHP – PHPMailer

Si, alguna vez necesitamos enviar un correo electrónico con PHP, gracias a la recomendación de http://twitter/ivonsue conocí una librería de PHP, llamada PHPMailer; la cual facilita en definitivo el envió de email con PHP; entre sus características tenemos:

  • La opción de enviar datos adjuntos.
  • Elegir Servidor SMTP.
  • Tipo de Seguridad SMTP.
  • Cuerpo del mensaje personalizado con HTML.
  • Cuenta a la que se responderá el email.
  • etc…

En fin, sus bondades son muchas, pasemos a lo que nos importa.

Crear pagina PHP que envié correo utilizando una cuenta de terra.com.mx

1.- Nos creamos una cuenta en terra.com.mx especialmente para enviar correos desde allí.

2.- Bajamos la librería de PHPMailer de aqui

3.- Levantamos nuestro servidor ( en este caso utilizo XAMPP ).

4.- Creamos un archivo php con lo siguiente:

   1: <?php
   2:     require("class.phpmailer.php");
   3:     $mail             = new PHPMailer();
   4:     $mail->IsSMTP();
   5:     $mail->SMTPAuth   = true;
   6:     //$mail->SMTPSecure = "ssl";
   7:     $mail->Host       = "smtp.terra.com.mx";
   8:     $mail->Port       = 587;
   9:     $mail->Username   = 'micorreodeterra@terra.com.mx';
  10:     $mail->Password   = "myPassWord";
  11:     //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  12:     //====== DE QUIEN ES ========
  13:     $mail->From       = "micorreodeterra@terra.com.mx";
  14:     $mail->FromName   = "Mi Nombre";
  15:     $mail->AddAttachment("images/foto.jpg", "foto_regalo.jpg"); //Archivo adjunto
  16:     //====== PARA QUIEN =========
  17:     $mail->Subject    = "Test Mail";
  18:     $mail->AddAddress("juanscutiaa@terra.com.mx","Para ti juan");
  19:     $mail->AddAddress("albertinn@hotmail.com","Para ti alberto");
  20:     
  21:     //Cuerpo del mensaje
  22:     $mail->Body      = "HOLA ESTO ES UNA PRUEBA";
  23:     $mail->Send();
  24: ?>

5.- Colocamos nuestro archivo php en la misma carpeta que los archivos class.phpmailer.php y class.smtp.php que descargamos de la pagina de phpMailer.

image

6.- Para probar nuestra pagina basta con abrir nuestro explorador e ingresar la dirección de nuestra pagina que acabamos de hacer.

«Por ultimo me gustaría explicar un poco el código de la pagina para no dejar alguna duda, a mi parecer es bastante sencillo pero quien sabe 😉 »

En la línea:

   1: require("class.phpmailer.php");

Simplemente “importamos” los métodos necesarios de la clase phpmailer

 

En la línea:

   1: $mail             = new PHPMailer();

Creamos un objetos de tipo PHPMailer, para poder interactuar con sus

métodos.

En las líneas:

   1: $mail->IsSMTP();
   2:     $mail->SMTPAuth   = true;
   3:     //$mail->SMTPSecure = "ssl";
   4:     $mail->Host       = "smtp.terra.com.mx";
   5:     $mail->Port       = 587;
   6:     $mail->Username   = 'micorreodeterra@terra.com.mx';
   7:     $mail->Password   = "myPassWord";

Configuramos el SMTP de terra.com.mx  😉 colocamos los datos de nuestra cuenta de terra.

En las líneas:

   1: //====== DE QUIEN ES ========
   2: $mail->From       = "micorreodeterra@terra.com.mx";
   3: $mail->FromName   = "Mi Nombre";
   4: $mail->AddAttachment("images/foto.jpg", "foto_regalo.jpg"); //Archivo adjunto
   5: //====== PARA QUIEN =========
   6: $mail->Subject    = "Test Mail";
   7: $mail->AddAddress("juanscutiaa@terra.com.mx","Para ti juan");
   8: $mail->AddAddress("albertinn@hotmail.com","Para ti alberto");

Configuramos departe de quien es el correo y si deseamos agregar algun archivo adjunto como en este caso una foto que se encuentra en la carpeta images, entonces haremos uso del método AddAttachment , de igual forma colocamos el Asunto del mensaje y los distintos destinatarios, si deseamos agregar mas destinarios simplemente lo hacemos con el método AddAddress.

Ya por ultimo en las líneas:

   1: //Cuerpo del mensaje
   2:     $mail->Body      = "HOLA ESTO ES UNA PRUEBA";
   3:     $mail->Send();

Escribimos el cuerpo del mensaje –>Body y enviamos el correo con –> Send()

Si desean tener una mayor seguridad de que el correo se envió correctamente pueden agregar una condición de la siguiente forma:

   1:  
   2: if($mail->Send()) {
   3: echo "Mensaje enviado correctamente";
   4: } else {
   5: echo "Error al enviar mensaje: " . $mail->ErrorInfo;
   6: }

Si todo sale correctamente ustedes verían el correo algo similar a esto:

image

*Es muy importante tomar en cuenta que este ejemplo es inseguro ya que al dejar en “texto plano” la contraseña de la cuenta, esta podría ser leída con facilidad.

Gracias Sue 🙂

Descargar archivos fuentes

 

Update: 21-Marzo-2011

Si desean agregar un mensaje que acompañe el mail, basta con agregar las siguientes líneas:

   1: $htmlBody = "<html><head><title>HTML Email</title></head><body>
<br /><h2>Titulo</h2><p>Esto es un link
<a href=\https://darkchicles.wordpress.com\
title=\"Blog darkchicles\">Da clic para visitar el blog</a>
Tu puedes colocar etiquetas html como lo quieras</p>"
;

   2:  

   3:    $mail->Body=$htmlBody;

   4:    $mail->isHTML(true);

Body, es el cuerpo del mail, allí podremos ocupar código html.

 

Mas info:

Uso de la clase PHPMailer

PHP Mailer Tutorial (en ingles)

Enviar email con PHPMailer utilizando tu cuenta de Gmail

Otro ejemplo para enviar correos con PHPMailes desde tu propio smtp

Configurar Outlook 2007 con cuenta de hotmail

PHPM@iler: http://phpmailer.worxware.com/

12 comentarios

  1. Que padre empezare a creear mi página agregandole la opcion de correo.

    Gracias Chickles y Sue por aportar apuntes como este que a varios les puede servir como a miguelito(osea yo) jejejeje.

  2. Buenos Dias mi estimado Darkchicles

    que tal ehh, ya tenia un rato que no veia algo nuevo y apenas entro y veo un buen aporte en php, sigue publicando con el buen animo de siempre.

    Saludos a Sue

  3. Interesante el tema, pero como le hago si tengo un formulario y quiero adjuntar un archivo y enviarlo. porque alli adjuntas algo pero ya defines tu archivo..en cambio yo lo quiero mostrar un sitio con el formulario que adjunte archive y que lo envie…Urgente ayudenme

    1. Una forma de hacerlo es que implementaras un «UPLOAD» donde el servidor reciba el archivo deseado, y posteriormente hagas referencia a el (adjuntar), cuando envies el mail. Espero te sea util esta idea.

  4. explicas mal amigo lo siento pero NO TE ENTIENDO NADAAAA!!
    que es eso de phpmailer en la pagina hay 6 versiones, debes explicar cual bajar, donde colocar las librerias esas que no se entiende!

  5. Buenas tardes amigo una pregunta el uso de $mail->AddAddress es por cada correo que deseo mandar ¿Mi pregunta mas va por o como mandar varios correos solo con un $mail->AddAddress?? no se si puede si en todo caso no se puede como se puede realizar el mandar varios correos por supuesto con PHPmailer … de antemano gracias …. 🙂

  6. Thought-provoking piece , I was fascinated by the points . Does someone know where my company could possibly get a blank IRS W-3 example to use ?

  7. Hola a todos.
    tengo algunos problemas con el emvio de email desde testlink al correo de office 365.

    Problema:

    Language string failed to load: tls PROBLEMS SENDING MAIL TO: xxxxxx@xxxxx.cl
    Mailer Error: Language string failed to load: tls

    Lo que ocurre es que el cliente PHP (PHPMailer) no está negociando correctamente con Office 365.

Deja un comentario