Cómo enviar correo electrónico mediante la función mail() de PHP

⚡ Resumen inteligente

PHP mail es la función integrada que envía correos electrónicos directamente desde un script PHP utilizando la configuración SMTP del servidor. Este tutorial cubre la sintaxis y los parámetros de mail(), la configuración de SMTP en php.ini, el saneamiento de la entrada del usuario con filter_var, el envío de correo seguro y el uso de PHP.Mailpara una entrega confiable.

  • 📧 ¿Qué hace la función mail()? La función mail() envía un correo electrónico desde un script, tomando como parámetros el destinatario, el asunto, el mensaje y los encabezados opcionales.
  • 📨 Transporte SMTP: El correo electrónico PHP se basa en SMTP, cuyo host, puerto y autenticación se configuran en el archivo de configuración php.ini.
  • 📋 CC y CCO: Los encabezados opcionales permiten añadir destinatarios con copia carbón y copia carbón oculta, mientras que la copia oculta (CCO) permanece oculta para los demás destinatarios.
  • 🛡️ Desinfectar la entrada: filter_var con FILTER_SANITIZE_EMAIL y FILTER_VALIDATE_EMAIL bloquea la inyección de encabezados desde la entrada del formulario de contacto.
  • 🔒 Seguro Mail: El cifrado de la conexión mediante SSL o TLS protege el contenido de los mensajes para que no puedan ser leídos durante la transmisión.
  • 🧰 Utilizar PHPMailer: PHPMailer agrega autenticación SMTP, archivos adjuntos y correo electrónico HTML, lo que lo hace más confiable que el correo sin procesar (mail()).
  • 🤖 Asistencia de IA: Las herramientas de IA pueden configurar PHPMailAyudamos con SMTP y sugerimos soluciones para que tus correos electrónicos no terminen en la carpeta de spam.

PHP Mail

¿Qué es el correo PHP?

PHP mail es la función integrada de PHP que se utiliza para enviar correos electrónicos desde scripts de PHP.

La función de correo acepta los siguientes parámetros:

  • Correo electrónico
  • Asunto
  • Mensaje
  • Direcciones de correo electrónico CC o CCO

Por qué y cuándo usar PHP Mail

La función de correo electrónico es útil en muchas situaciones:

  • Es una forma rentable de notificar a los usuarios sobre eventos importantes.
  • Permita que los usuarios se comuniquen con usted por correo electrónico proporcionando un formulario de contacto en el sitio web que envía por correo electrónico el contenido proporcionado.
  • Los desarrolladores pueden usarlo para recibir errores del sistema por correo electrónico.
  • Puede usarlo para enviar correos electrónicos a los suscriptores de su boletín informativo.
  • Puedes usarlo para enviar enlaces de restablecimiento de contraseña a los usuarios que olviden sus contraseñas.
  • Puedes usarlo para enviar enlaces de activación y confirmación por correo electrónico. Esto es útil al registrar usuarios y verificar sus direcciones de correo electrónico.

Envío de correo electrónico mediante PHP

La función de correo electrónico de PHP tiene la siguiente sintaxis básica.

<?php
mail($to_email_address,$subject,$message,[$headers],[$parameters]);
?>

AQUÍ,

  • “$to_email_address” es la dirección de correo electrónico del destinatario del correo
  • “$subject” es el asunto del correo electrónico
  • “$message” es el mensaje a enviar.
  • “[$headers]” es opcional; se puede utilizar para incluir información como CC y CCO.
    • CC son las siglas de "copia carbón". Se utiliza cuando se desea enviar una copia a una persona interesada; por ejemplo, un correo electrónico de queja enviado a una empresa también puede enviarse con copia (CC) al comité de quejas.
    • CCO son las siglas de "copia oculta". Es similar a CC, pero las direcciones de correo electrónico incluidas en la sección CCO no se muestran a los demás destinatarios.

Fácil Mail Transmission Protocolo (SMTP)

El correo PHP utiliza el Simple Mail Transmission Protocolo (SMTP) para enviar correo.

En un servidor alojado, la configuración SMTP ya estaría establecida.

La configuración del correo SMTP se puede configurar desde el archivo “php.ini” en la carpeta de instalación de PHP.

Para configurar los ajustes SMTP en su localhost, suponiendo que está utilizando XAMPP en Windows, localice el archivo “php.ini” en el directorio “C:\xampp\php”.

  • Ábrelo con el Bloc de notas o cualquier editor de texto. En este ejemplo, usaremos el Bloc de notas. Haz clic en el menú Editar.

Fácil Mail Transmission Protocolo

  • Haz clic en el menú Buscar…

Fácil Mail Transmission Protocolo

  • Aparecerá el cuadro de diálogo Buscar.

Fácil Mail Transmission Protocolo

  • Haz clic en el botón Buscar siguiente

Fácil Mail Transmission Protocolo

Localiza las entradas en [función de correo]. Las líneas predeterminadas suelen tener este aspecto:

  • ; SMTP = servidor local
  • ; puerto_smtp = 25

Elimine los puntos y coma antes de SMTP y smtp_port, y configure SMTP a su Servidor SMTP y el puerto a su puerto SMTP. Su configuración debería verse así:

  • SMTP = smtp.ejemplo.com
  • puerto_smtp = 25

Nota: la configuración SMTP se puede obtener de su proveedor de alojamiento web. Si el servidor requiere autenticación, agregue las siguientes líneas:

  • nombre_usuario_autenticación = nombre_usuario_ejemplo@ejemplo.com
  • contraseña_autenticación = contraseña_ejemplo

Guarda los nuevos cambios y reinicia el APACHE servidor.

PHP Mail Ejemplo

Veamos ahora un ejemplo que envía un correo electrónico sencillo.

<?php
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
mail($to_email,$subject,$message,$headers);
?>

Salida:

Fácil Mail Transmission Protocolo

Nota: el ejemplo anterior solo acepta los 4 parámetros obligatorios. Debe reemplazar la dirección de correo electrónico ficticia anterior con una dirección de correo electrónico real.

Desinfección de entradas de correo electrónico de los usuarios

El ejemplo anterior utiliza valores codificados en el código fuente para la dirección de correo electrónico y otros detalles para simplificar.

Supongamos que tienes que crear un formulario de contacto donde los usuarios completen sus datos y luego lo envíen.

  • Los usuarios pueden inyectar código en las cabeceras de forma accidental o intencionada, lo que puede provocar el envío de correo basura.
  • Para proteger su sistema de este tipo de ataques, puede crear una función personalizada que desinfecte y valide los valores antes de enviar el correo.

Vamos a crear una función personalizada que valide y desinfecte la dirección de correo electrónico utilizando la función integrada filter_var. La función filter_var se utiliza para desinfectar y validar los datos introducidos por el usuario.

Tiene la siguiente sintaxis básica.

<?php
filter_var($field, SANITIZATION_TYPE);
?>

AQUÍ,

  • “filter_var(…)” es la función de validación y desinfección
  • “$campo” es el valor del campo a filtrar.
  • “SANITIZATION_TYPE” es el tipo de desinfección que se realizará en el campo, como por ejemplo:
    • FILTRO_VALIDAR_CORREO_ELECTRÓNICO – Devuelve verdadero para direcciones de correo electrónico válidas y falso para direcciones de correo electrónico no válidas.
    • FILTRO_DESINFECTAR_CORREO_ELECTRÓNICO – Elimina los caracteres no válidos de las direcciones de correo electrónico, de modo que una dirección con caracteres extraños se reduce a info@dominio.com.
    • FILTRO_DESINFECTAR_URL – elimina caracteres ilegales de URLs, dejando una dirección limpia como https://www.example.com.
    • FILTER_SANITIZE_STRING – Elimina las etiquetas de los valores de cadena, por lo que `am bold` se convierte en `am bold`. Tenga en cuenta que este filtro está obsoleto en PHP 8.1; utilice `htmlspecialchars()` en su lugar.

El código que aparece a continuación utiliza una función personalizada para enviar correos electrónicos seguros.

<?php
function sanitize_my_email($field) {
$field = filter_var($field, FILTER_SANITIZE_EMAIL);
if (filter_var($field, FILTER_VALIDATE_EMAIL)) {
return true;
} else {
return false;
}
}
$to_email = 'name@example.com';
$subject = 'Testing PHP Mail';
$message = 'This mail is sent using the PHP mail function';
$headers = 'From: noreply@example.com';
// check if the email address is invalid
$secure_check = sanitize_my_email($to_email);
if ($secure_check == false) {
echo "Invalid input";
} else { // send email
mail($to_email, $subject, $message, $headers);
echo "This email is sent using PHP Mail";
}
?>

Salida:

Desinfección de entradas de correo electrónico de los usuarios

Seguro Mail

Los correos electrónicos pueden ser interceptados durante la transmisión por destinatarios no deseados.

Esto puede exponer el contenido del correo electrónico a destinatarios no deseados.

El correo seguro resuelve este problema mediante transmitenviar correos electrónicos a través de una conexión cifrada usando SSL o TLS, por ejemplo SMTP sobre SSL en el puerto 465 o STARTTLS en el puerto 587.

El cifrado codifica el mensaje antes de enviarlo, de modo que solo el servidor de correo del destinatario previsto puede leerlo.

PHPMailer: Una mejor alternativa a mail()

Para aplicaciones reales, la mayoría de los desarrolladores utilizan PHP.Mailbiblioteca er en lugar de la función mail() sin procesar. PHPMailSe autentica con un servidor SMTP externo, lo que mejora enormemente la capacidad de entrega y simplifica el envío de archivos adjuntos y correos electrónicos en formato HTML.

Instálalo con Composer y, a continuación, envía correos electrónicos a través de una conexión SMTP autenticada y cifrada, como se muestra a continuación.

<?php
use PHPMailer\PHPMailer\PHPMailer;
require 'vendor/autoload.php';

$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.example.com';
$mail->SMTPAuth = true;
$mail->Username = 'user@example.com';
$mail->Password = 'secret';
$mail->SMTPSecure = 'tls';
$mail->Port = 587;

$mail->setFrom('noreply@example.com', 'My App');
$mail->addAddress('name@example.com');
$mail->Subject = 'Testing PHPMailer';
$mail->Body = 'This email is sent using PHPMailer over SMTP';
$mail->send();
?>

En comparación con mail(), PHPMailer te ofrece autenticación SMTP, cifrado integrado, compatibilidad con archivos adjuntos y un manejo de errores más claro, por lo que es la opción recomendada para el correo electrónico en producción.

Preguntas Frecuentes

La causa más común es que no hay un servidor de correo configurado en localhost. Configure los valores SMTP correctos en php.ini o utilice PHP.MailAsegúrese de tener una cuenta SMTP autenticada. Revise también el registro de errores del servidor y su carpeta de correo no deseado.

Agregue encabezados que establezcan MIME-Version en 1.0 y Content-Type en text/html, luego inserte el marcado HTML en el cuerpo del mensaje. PHPMailer maneja esto automáticamente cuando configuras su opción isHTML(true).

FILTER_SANITIZE_STRING está obsoleto desde PHP 8.1. Utilice htmlspecialchars() para escapar la salida para su visualización, o un validador específico como FILTER_VALIDATE_EMAIL, dependiendo de si está limpiando o verificando el valor.

Sí. Proporcione a la IA su host SMTP, puerto y tipo de seguridad, y podrá generar el PHP completo.MailConfiguración con autenticación, remitente, destinatarios y manejo de errores. Almacene las credenciales en variables de entorno, no en el código.

Sí. La IA puede asesorarle sobre los registros SPF, DKIM y DMARC, el uso de un remitente SMTP autenticado, la prevención de palabras clave que activan el spam y la configuración de una dirección de remitente válida, y luego ayudarle a probar la capacidad de entrega.

Resumir este post con: