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é 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.
- Haz clic en el menú Buscar…
- Aparecerá el cuadro de diálogo Buscar.
- Haz clic en el botón Buscar siguiente
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:
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:
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.






