jueves, 26 de marzo de 2009

Protocolo SMTP de transporte de correo

SMTP = Simple Mail Transfer Protocol (Ingles) = Protocolo Simple de Transferencia de Correo (Español)


Características



  • Es un protocolo de la capa de aplicación.

  • Es un protocolo ASCII sencillo .

  • Se basea en el modelo cliente servidor (Tamaño máximo permitido 1000 caracteres).

  • Normalmente establece la conexión TCP con el puerto 25.


1) Envío de correos


En esta sección se describe como funciona el servicio SMTP, para diferenciarlo del servio de envío POP3. ¿Qué es SMTP? ¿Es un protocolo usado para enviar el correo? NO. El SMTP no es un protocolo sencillo como lo es POP3, en el que un cliente conecta con un servidor para hacer una cosa, y una cosa solamente (en el caso de POP3, lo que hace es recibir el correo). El SMTP es un servicio complejo de correo a través de servidores, usando un protocolo estándar para enviar y para recibir el correo. Puede sonar extraño, pero un servidor del SMTP recibe y envía el correo, y los correos que le llegan los envía de la misma manera que recibe, es decir, con el SMTP.


1.1) Una analogía con nuestro buzón de correos


El servicio POP3 se puede asimilar a nuestro buzón de correos de nuestra casa, abriéndolo y tomando el correo que está adentro.


La complejidad implicada es muy diferente en los dos casos, y la semejanza es escasa.


1.2) Un ejemplo práctico


Vamos presentar un ejemplo simple, siendo más profundos en los detalles del SMTP, y así se entenderá mejor. Si le han convencido los ejemplos anteriores usted puede saltar el ejemplo de Alicia y Carlos.


Nosotros tenemos dos personas en nuestro ejemplo:




Alicia


Tiene una dirección de correo alicia@foo.com y es un cliente del Internet foo.com, así que ella utiliza como dominio pop.foo.com mientras que un servidor POP3 le sirve para descargar el correo y smtp.foo.com le sirve como servidor del SMTP para enviarlo; ambos son servicios ofrecidos por su suministrador de Internet foo.com.


Carlos


Tiene una dirección de correo carlos@baz.com y es un cliente del suministrador de internet baz.com, así que él utiliza el dominio pop.baz.com, mientras que un servidor POP3 le sirve para descargar el correo, y SMTP.baz.com como servidor del SMTP para enviarlo, semejantemente a Alicia.



Vamos ver qué sucede cuando Alicia envía el correo a Carlos y consigue una contestación después


Alicia escribe el email usando como destinatario carlos@baz.com y lo envía al servidor SMTP smtp.foo.com de su suministrador de Internet (el ISP). El servidor recibe el email de Alicia y se da cuenta que está destinado a un usuario de baz.com (usuario que no le pertenece); por lo tanto, lo remite al servidor del SMTP de baz.com, que es smtp.baz.com. Este último (baz.com) se da cuenta que es para un usuario de baz.com (su propio dominio) así que no lo remite a ningún otro servidor del SMTP sino que lo archiva en la bandeja de entrada de Carlos. Carlos recibe el correo de Alicia usando el servidor POP3 pop.baz.com y escribe la respuesta a Alicia con smtp.baz.com; el último lo remite a smtp.foo.com que de la misma forma que antes, entiende que es para uno de sus usuarios locales y lo archiva en la bandeja de entrada de Alicia, permitiendo que Alicia lo lea usando el servicio POP3 pop.foo.com.



<?php

//error_reporting(E_ALL);

error_reporting(E_STRICT);

date_default_timezone_set('America/Toronto');

include("class.phpmailer.php");

//include("class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded

$mail             = new PHPMailer();

$body             = $mail->getFile('contents.html');

$body             = eregi_replace("[\]",'',$body);

$mail->IsSMTP();

$mail->SMTPAuth   = true;                  // enable SMTP authentication

$mail->SMTPSecure = "ssl";                 // sets the prefix to the servier

$mail->Host       = "smtp.gmail.com";      // sets GMAIL as the SMTP server

$mail->Port       = 465;                   // set the SMTP port for the GMAIL server

$mail->Username   = "yourusername@gmail.com";  // GMAIL username

$mail->Password   = "yourpassword";            // GMAIL password

$mail->AddReplyTo("yourusername@gmail.com","First Last");

$mail->From       = "name@yourdomain.com";

$mail->FromName   = "First Last";

$mail->Subject    = "PHPMailer Test Subject via gmail";

//$mail->Body       = "Hi,<br>This is the HTML BODY<br>";                      //HTML Body

$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test

$mail->WordWrap   = 50; // set word wrap

$mail->MsgHTML($body);

$mail->AddAddress("whoto@otherdomain.com", "John Doe");

$mail->AddAttachment("images/phpmailer.gif");             // attachment

$mail->IsHTML(true); // send as HTML

if(!$mail->Send()) {

  echo "Mailer Error: " . $mail->ErrorInfo;

} else {

  echo "Message sent!";

}

?>


BIBLIOGRAFÍA

[1] FreePops. [http://www.freepops.org/es/smtp.shtml] 26-III-2009

[2] Simple Thoughts [http://blog.taragana.com/index.php/archive/how-to-send-mails-using-smtp-server-in-php/es/] 26-III-2009


No hay comentarios:

Publicar un comentario