Enviar Mails/Correos con PHP (planos y Html)

PHP nos permite enviar correos de manera bastante sencilla usando la función mail(), es bastante sencillo y nos da la posibilidad de enviar correo en formato HTML definiendo la cabecera previamente. Con esta función con solo los 3 parámetros (destino, asunto, mensaje) ya podemos enviar correos solo que saldrá como remitente nobody@tuserviciohost.com; El formato de la función mail() es la siguiente:

mail ( string $destino , string $asunto , string $mensaje [, string $cabeceras])

mail_picture

 Aquí un ejemplo:

<?php
$para = 'destino@dominio.com';
$titulo = 'El título del correo';
$mensaje = 'Hola, bienvenido a mi sitio web \r\n Saludos'; //Mensaje de 2 líneas
$cabeceras = 'From: webmaster1@midominio.com' . "\r\n" . //La dirección de correo desde donde supuestamente se envió
    'Reply-To: webmaster2@midominio.com' . "\r\n" . //La dirección de correo a donde se responderá (cuando el recepto haga click en RESPONDER)
    'X-Mailer: PHP/' . phpversion();  //información sobre el sistema de envío de correos, en este caso la versión de PHP

mail($para, $titulo, $mensaje, $cabeceras);
?>

El Destinatario:
Es el correo de destino o a quien se va a entregar el mensaje, es un campo obligatorio. En esa variable podemos poner por ejemplo “Wilson Sánchez <wilsson@hotmail.com>”, o  “wilsson@hotmail.com” de las dos formas se pueden enviar.

Asunto o Titulo
El asunto o titulo de un correo. Este campo no es obligatorio ya que si no lleva asunto aparecerá (sin asunto), si el asunto es muy largo se te abreviará con “…” (tres puntos) .

Cuerpo del Mensaje o Contenido
En el contenido del mensaje del correo.  Aquí según la cabecera el correo puede ser plano o HTML (también existe el mixto). Si el correo es de tipo Plano todo el texto lo tomará como 1 sola línea solo respetando los siguientes  palabras reservadas o tag

  • \n = salto de línea
  • \t = sangría
  • \r = retorno de carro

Aquí un Correo en HTML pero con mucho más opciones, recuerden que es importante especificar que es HTML en la cabecera del correo.

<?php
$para  = 'usuario1@dominio.com' . ', '; // atención a la coma
$para .= 'otrousuario@otrodominio.com';

// Asunto
$titulo = 'Atención con cambio de tarifas';

// Cuerpo o mensaje
$mensaje = '
<html>
<head>
  <title>Atención con el Cambio de Tarifas y Comisiones</title>
</head>
<body>
  <p>¡todos los vendedores a leer las tarifas según empresas!</p>
  <table>
    <tr>
      <th>Empresa</th><th>Tarifa Anterior</th><th>Nueva Tarifa</th><th>Comisión</th>
    </tr>
    <tr>
      <td>Repsol</td><td>3.3</td><td>3.5</td><td>10%</td>
    </tr>
    <tr>
      <td>Telefónica</td><td>17.45</td><td>18.1</td><td>11%</td>
    </tr>
  </table>
</body>
</html>
';

// Cabecera que especifica que es un HMTL
$cabeceras  = 'MIME-Version: 1.0' . "\r\n";
$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

// Cabeceras adicionales
$cabeceras .= 'From: Recordatorio <tarifas@example.com>' . "\r\n";
$cabeceras .= 'Cc: archivotarifas@example.com' . "\r\n";
$cabeceras .= 'Bcc: copiaoculta@example.com' . "\r\n";

// enviamos el correo!
mail($para, $titulo, $mensaje, $cabeceras);
?>

Y es así como podemos enviar correos usando la función mail() en php, en algunos servidores compartidos (shared hosting) pueden restringir el uso a cierta cantidad de correos por hora o incluso desactivar esa función para evitar que manden listas de correo o hagan mal uso de esta función.


Posted

in

by

Comments

17 respuestas a “Enviar Mails/Correos con PHP (planos y Html)”

  1. hernan Avatar
    hernan

    muchas gracias, excelente explicación

  2. Agustin Avatar

    Hola! es muy interesante este codigo. Ahora, como hago para Ejecutarlo?

    1. NOVO Avatar
      NOVO

      En un Hosting, que soporte PHP.

  3. Berenes Avatar

    Muchas gracias. Sabes si se puede mandar el cuerpo del mensaje desde un archivo externo con alguna función?

    1. NOVO Avatar
      NOVO

      Cómo así Berenes ….

      Explicate mejor, decime que queres hacer????

  4. NOVO Avatar
    NOVO

    Todo perfecto !!!, lo que necesito saber es como evitar que ingrese a SPAM, todas las cuentas que envié, se fueron a SPAM

    HELP !!

  5. angel Avatar
    angel

    Colega una consulta como envio ese html con estilos css? los cargo en la variable $mensaje ? Saludos gran post!

  6. Sarahi González Avatar
    Sarahi González

    Muchas gracias por el post, pero una pregunta, cuanto tiempo se tarda en recibir el correo el destinatario.

  7. adolfo rios Avatar

    la función mail() no funciona, sabrán el motivo?, hice todo lo indicado y no manda nada..

  8. Alfredo Avatar
    Alfredo

    Hola alguien me puede ayudar, tengo el problema que si lo hago desde mi maquina local si envia los correos, pero cuando lo intento enviar de un servidor que tenemos no envia nada pero no me marca error, creen que tenga que ser por la ip dedicada que tiene?

  9. Gaizka Avatar
    Gaizka

    Hola! Sigo los pasos pero luego el mail esta en blanco, porque puede ser?

  10. Joel Avatar

    Me voy a ir a programar con diosito

  11. lion Avatar
    lion

    que tal y con que función se hace para que pueda uno cambiar el remitente y no el que es de mi hosting

  12. anastasia Avatar
    anastasia

    buenas como podria enviar una imagen en el cuerpo del mensaje? presento problemas con la url, xq al llegar el correo no muestra la imagen, la muestra es un cuadro pequeño con una “X”. Por favor

  13. Julio Martínez Avatar
    Julio Martínez

    Buen día, al ejecutar el código me aparece el siguiente error: SMTP server response: 553 sorry, that domain isn’t in my list of allowed rcpthosts (#5.5.3 – chkuser)

    Desde ya muchas gracias

Agregue un comentario a lion Cancelar respuesta

Su dirección de correo no se hará público. Los campos requeridos están marcados *