Cómo enviar correos con PHP por SMTP
Hay varias formas de enviar correos con PHP pero solo una de ellas asegura la recepción del email: usando el protocolo SMTP con autenticación. Si estás habituado a programar en PHP, seguro que conoces la función mail(). Vamos a explicar por qué no debería usarse y cómo enviar correos autenticándonos en un servidor SMTP.
La función mail() de PHP usa la configuración del fichero PHP.ini para enviar correos a través de sendmail, que suele estar instalado en cualquier servidor Linux. El problema está en que la cabecera FROM del mensaje coge por defecto el parámetro correspondiente configurado en sendmail, de modo que el correo se envía desde el propio servidor web.
Esto puede ocasionar que muchas veces los correos lleguen al buzón de correos no deseados ya que se detecta como spam, o incluso es posible que ni lleguen al destinatario.
Lo ideal es que el correo se envíe desde un servidor SMTP y que este requiera autenticación, de modo que podemos usar una dirección de correo electrónico real como enviadora de emails. Así nos aseguramos que el email siempre llegará al destinatario y en su bandeja de entrada.
Usando SMTP para enviar correos electrónicos
Esto lo vamos a conseguir muy fácilmente con la librería PHPMailer, que se encarga de todo el trabajo sucio y nos ofrece una forma sencilla de enviar emails. Solo necesitas descargar el zip que te hemos preparado y seguir las instrucciones.
Descargar ejemploPaso 1: sube la librería a tu servidor web
Descomprime el fichero zip. Dentro encontrarás una carpeta que contiene el código que necesitas. Sube esta carpeta a al servidor web, por ejemplo, en la raíz donde tienes alojada tu web.
Paso 2: configuración inicial
En la carpeta que has subido al servidor web, encontrarás un fichero config.php. Ábrelo con tu editor favorito y rellena los siguientes parámetros:
- Host: dirección donde se encuentra alojado el servidor de correo, que suele ser algo como smtp.tuweb.com.
- SMTPSecure: puedes poner SSL o TLS, dependiendo de lo que tu servidor requiera.
- Port: puerto de conexión del servidor SMTP. Depende del protocolo usado anteriormente, normalmente será: 25, 587 o 465. En caso de duda consulta a tu proveedor.
- SMTPAuth: lo dejaremos en true para habilitar la autenticación con usuario y contraseña.
- Username: usuario para autenticarse, normalmente es el correo electrónico.
- Password: contraseña asociada a la cuenta de correo.
- From: correo electrónico que estamos autenticando.
- FromName: Puedes poner lo que quieras, como el nombre de tu empresa, el tuyo, el nombre de tu web, etc.
- CharSet: es la codificación que se usará para los mensajes enviados, puedes dejar UTF-8.
Paso 3: enlaza tu código con el fichero config.php
En la carpeta que has subido al servidor web hay varios ficheros, solamente necesitas enlazar tu código con el fichero config.php, el fichero de configuración ya se encarga del resto de enlaces con la librería. Para hacerlo, tendrás que introducir en tu código:
require_once('path/to/PHPMailerByEndeos/config.php');
Paso 4: ¡Envía correos!
Puedes usar la siguiente base de código para enviar mensajes:
$mail->ClearAllRecipients( ); $mail->AddAddress("destinatario@email.com"); $mail->AddCC("concopia1@email.com"); $mail->AddCC("concopia2@email.com"); $mail->IsHTML(true); //podemos activar o desactivar HTML en mensaje $mail->Subject = 'asunto del mensaje'; $msg = "<h2>Contenido mensaje HTML:</h2> <p>Contenido</p> <p>Más Contenido...</p> "; $mail->Body = $msg; $mail->Send();
Con esto ya estarás enviando correos electrónicos a través del protocolo SMTP con autenticación, de modo que el mensaje llegará al destinatario con total seguridad, además de que lo verá en la bandeja de entrada.
Si el mensaje llegara a la bandeja de spam, es posible que la dirección de correo remitente esté en alguna lista negra, puedes verificarlo con las útiles herramientas de MXToolbox.
En este artículo te mostramos un código base, la librería PHPMailer tiene muchas opciones de configuración y parámetros que también puedes usar.
Si te ha surgido alguna duda deja un comentario, miraremos de ayudarte.
- classic-editor-remember:
- classic-editor
- factory_shortcodes_assets:
- a:0:{}