lunes, 2 de febrero de 2009

Enviar correo electrónico con PHP. Parte I

Preparación:
- Se usará PHP 5.0
- APACHE 2.2.8 (Estoy usando XAMPP, aunque puede ser WAMP
  Server o AppServer).
- IIS (Por supuesto Apagado, no se ocupa si estamos
  en Windows)
- La función mail( ) de PHP: La función mail( ) prepara
  el mensaje y luego le pasa todos los datos al servidor
  SMTP. 
Es muy fácil enviar mensajes de correo electrónico con PHP; para realizarlo hay que utilizar la función mail(), pasándole la dirección electrónica del destinatario, el título del mensaje y el cuerpo del mensaje. El resto de parámetros que se le pueden pasar a esta función son opcionales y permiten personalizar el mensaje como por ejemplo enviar archivos adjuntos, imágenes, etc. Si se desea hacer cosas más avanzadas, recomiendo utilizar PHPMailer.

El código para enviar correo electrónico con PHP es:

$destinatario = "username@hostname.com";
$asunto = "Este mensaje es de prueba";
$cuerpo = "Mensaje de prueba";
$headers = "From: username@gmail.com\r\n";
ini_set("SMTP","127.0.0.1"); //Hacer referencia al servidor de correo electrónico.

//A continuación, uso el puerto 25, éste es el predeterminado configurado en php.ini
ini_set("smtp_port","25");

ini_set('sendmail_from', 'valid email address');
mail($destinatario,$asunto,$cuerpo/*,$headers*/);

ADVERTENCIA: Si parece que el mensaje se envia, pero no vemos nada en nuestra bandeja de entrada, entonces verificar si el correo se guarda en la carpeta de "Correo no deseado". Es casi garantizado que el mensaje está en esa carpeta.

Si aparece el siguiente mensaje de error:

Warning: mail() [function.mail]: Failed to connect to mailserver at "127.0.0.1" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in "VirtualDirectory\Demo\prueba.php" on line 17

Esto puede ser porque el el servidor Apache está apagado o en pausa.

Finalmente, en el ejemplo se está usando la función ini_set() , esto es porque decidí establecer manualmente el servidor,el puerto y destinatario; no obstante, el servidor de correo, el puerto y destinatario se puede poner en el archivo php.ini para no estarlos estableciendo manualmente.

Recordemos que la función init_set(), nos va a servir para inicializar las variables de configuración que existen en el archivo php.ini.

Hay que tener presente también que en el archivo php.ini existen las variables SMTP para establecer el nombre del servidor de correo y la variable send_mail_from para poner la dirección de correo predeterminada pero en mi caso, también decidí usar la función init_set() para establecer los respectivos valores.

Si se desea crear mensajes más complejos ir a Enviar correo electrónico con PHP. Parte II

1 comentario:

SMRipoll dijo...

Bendito! por fin encuentro la solucion a mi problema con la función mail de PHP. Me ha sido de gran utilidad. Gracias! por publicarlo ;)