PHP Email · 4 min read · Oct 25, 2025
Enviando Correo Electrónico Desde PHP
Enviando Correo Electrónico Desde PHP
Este tutorial muestra cómo puedes enviar mensajes de correo electrónico fácilmente desde un servidor web habilitado para PHP. Se puede utilizar para procesar datos de formularios, enviar alertas, etc. También explica un poco sobre el formato de los encabezados de correo electrónico.
Configuración del Sistema
Obviamente necesitas tener un servidor web instalado junto con PHP. También necesitas asegurarte de que tu sistema operativo tenga algún agente de correo instalado (por ejemplo, Sendmail en Linux o servicio SMTP bajo IIS). Y asegúrate de que el puerto 25 no esté bloqueado. Esto es necesario incluso si reenvías mensajes a través de un segundo servidor.
PHP tiene la función mail habilitada por defecto. Sin embargo, puedes especificar las opciones adicionales en el archivo ‘php.ini’ en la sección [mail function] (línea # alrededor de 700).
Sintaxis
Aquí está la sintaxis completa del comando mail():
bool mail ( string $email_address_to, string $subject, string $message_contents [, string $additional_headers [, string $additional_parameters]] );Los primeros 3 parámetros no requieren ninguna explicación: dirección de correo electrónico del destinatario, asunto del mensaje, contenido del mensaje. El parámetro $additional_headers incluye los encabezados de correo electrónico que enumeraré más adelante. $additional_parameters se utiliza para pasar opciones específicas para el programa utilizado para enviar correo (como sendmail) y rara vez se utiliza. Necesitas consultar las páginas del manual de sendmail para la lista de opciones.
El mínimo absoluto requiere que especifiques lo siguiente:
mail ( $email_address_to , $subject, $message_contents );Sin embargo, se recomienda definir encabezados adicionales por razones de cumplimiento. El mensaje de correo electrónico debe ser compatible con RFC #822.
El ejemplo a continuación muestra algunos encabezados de correo electrónico que se pueden utilizar:
- From: La dirección de correo electrónico del remitente.
- Reply-To: La dirección de correo electrónico a la que deben enviarse las respuestas.
- Return-Path: Esto se utiliza en caso de que el mensaje no se entregue y deba ser devuelto.
- Subject: Asunto del correo electrónico.
- CC: Copia Carbono. Una lista separada por comas de más destinatarios que serán vistos por todos los demás destinatarios.
- BCC: Copia Carbono Oculta. Una lista separada por comas de más destinatarios que no serán vistos por ningún otro destinatario.
- Content-type: Define el tipo MIME del mensaje.
- X-Mailer: Especifica el cliente de correo utilizado para enviar el mensaje.
Lo importante a recordar es que los nombres de los encabezados son sensibles a mayúsculas y minúsculas y que cada encabezado debe terminar con caracteres de retorno y nueva línea.
Cada mensaje se enruta a través de un mínimo de 2 servidores de correo electrónico (remitente y destinatario). Sin embargo, puede haber más servidores de correo electrónico en la ruta, como servidores de retransmisión, servidores antiSPAM, etc. Cada uno de ellos agregará sus propios encabezados a tu mensaje. También debes tener en cuenta que tu servidor web podría, dependiendo de la configuración, intercambiar algunos campos de encabezado como Return-Path. Ten en cuenta que este campo no afecta la dirección de respuesta.
Ejemplo
Aquí hay un ejemplo simple que enviará un mensaje de correo electrónico:
Ejemplo Completo
Este ejemplo muestra una estructura más organizada con más opciones y más encabezados:
";
$email_return_to = "[email protected]";
$email_content_type = "text/html; charset=us-ascii";
$email_client = "PHP/" . phpversion();
//
------------------------- //
// --- DEFINIR ENCABEZADOS --- //
//
$email_header = "From: " . $email_sender . "\r\n";
$email_header .= "Reply-To: " . $email_return_to . "\r\n";
$email_header .= "Return-Path: " . $email_return_to . "\r\n";
$email_header .= "Content-type: " . $email_content_type . "\r\n";
$email_header .= "X-Mailer: " . $email_client . "\r\n";
//
---------------------- //
// --- ASUNTO Y CONTENIDOS --- //
//
$email_subject = "Asunto del correo de prueba";
$email_contents = "";
$email_contents .= "Correo de Prueba
";
$email_contents .= "
Remitente: " . $email_sender;
$email_contents .= "
Destinatario: " . $email_recipient;
$email_contents .= "";
//
---------------------------- //
$email_result = mail($email_recipient, $email_subject, $email_contents, $email_header);
if ($email_result) echo "¡El correo ha sido enviado!";
else echo "¡El correo ha fallado!";
?>
[email protected]>- Nota: La implementación de mail() en Windows difiere en muchos aspectos de la implementación en Unix. Primero, no utiliza un binario local para componer mensajes, sino que solo opera en sockets directos, lo que significa que se necesita un MTA escuchando en un socket de red (que puede estar en la máquina local o en una máquina remota). Segundo, los encabezados personalizados como From:, Cc:, Bcc: y Date: no son interpretados por el MTA en primer lugar, sino que son analizados por PHP. Como tal, el parámetro to no debe ser una dirección en la forma de “Algo < [email protected] >”. El comando mail puede no analizar esto correctamente al comunicarse con el MTA.
- Nota: Vale la pena mencionar que la función mail() no es adecuada para volúmenes más grandes de correo en un bucle. Esta función abre y cierra un socket SMTP para cada correo, lo cual no es muy eficiente.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.