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.

17 Comentarios para “Enviar Mails/Correos con PHP (planos y Html)”

  1. muchas gracias, excelente explicación

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

    1. En un Hosting, que soporte PHP.

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

    1. Cómo así Berenes ….

      Explicate mejor, decime que queres hacer????

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

    HELP !!

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

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

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

  8. 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. Hola! Sigo los pasos pero luego el mail esta en blanco, porque puede ser?

  10. Me voy a ir a programar con diosito

  11. 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. 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. 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

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