Primero creemos una clase a la que llamaremos SendMail, en primera instancia importamos las clases a utilizar:
Código :
Cita:
De todas las que tenemos allí, la de mayor importancia es la "flash.net.Socket". Esta clase permite a ActionScript crear una conexión ó Socket para leer o escribir datos. Una vez que importamos las clases empezamos a codificar ya la clase en si, declaramos algunas variables a utilizar y el constructor de la clasepackage clases { //Importamos clases a utilizar import flash.net.Socket; import flash.errors.*; import flash.events.*; import flash.utils.*;}
Código :
Cita:
Dentro de las variables tenemos:public class SendMail extends Socket { private var response:String; private var conectado:Boolean = false; private var shost:String; private var errorLog:String = ""; //Constructor de la clase public function SendMail(host:String = null, port:int = 0) { //Llamamos al constructor de la super clase shost = host; super(host, port); configureListeners(); }}
response: Donde almacenaremos la respuesta o información recibida por el servidor
conectado: que nos permitirá saber si la conexión al Socket fue exitosa o no
shost: Aquí almacenaremos el nombre del host, ya veremos más adelantes para que la usaremos
Nuestra clase extiende de Socket; es por ello que en nuestro constructor llamamos al constructor de la súper clase, le pasamos el host, que bien puede ser, o la dirección IP o el nombre del servidor de correo y el puerto a conectarnos. Generalmente es el 25. Una vez hecho esto tenemos un método llamado configureListeners():
Código :
Cita:
Asignamos lo manejadores de evento a utilizar. Esta vez solo usaremos el "Event.CONNECT", que se llama una vez que la conexión al host es establecida y el 'ProgressEvent.SOCKET_DATA', que es llamado cuando se recibe alguna respuesta del servidor. private function configureListeners():void { addEventListener(Event.CONNECT, connectHandler); addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);}
Código :
Cita:
En la primera se coloca el valor 'true' a la variable conectado y en la segunda se llama a una función llamada readResponse(). Cada vez que el servidor genera o envía una respuesta a los datos enviadosprivate function connectHandler(event:Event):void { //Si el servidor establece la conexión, cambiamos el valor de la variable conectado = true;}private function socketDataHandler(event:ProgressEvent):void { readResponse();}
Código :
Cita:
private function readResponse():void { var str:String = readUTFBytes(bytesAvailable); response += str; trace(response.toString());}
Arriba vemos la función readResponse(), que imprime mediante el trace. Los datos de respuesta del servidor aparecen mediante la propiedad readUTFBytes, en forma de string. Luego, vamos a crear un getter que nos permitirá saber si el servidor se encuentra conectado o no
Código :
Cita:
Una vez finalizado esto, vamos a crear la función que se encargara de enviar el mail. Quizas han enviado correo mediante telnet alguna vez, los que no revisen cómo hacerlo. Es lo que usaremos, veamos la función:public function get IsConnect():Boolean{ return this.conectado;}
Código :
Cita:
public function sendRequest(sender:String = "[email protected]", reciver:String = "[email protected]", subject:String = null, msg:String = null):void { response = ""; //Cuando establecimos la coneción al host, estribimos en el flujo del socket. la información //para el envio del mail try { this.writeUTFBytes ("HELO "+shost+"\r\n"); this.writeUTFBytes ("MAIL FROM: <"+sender+">\r\n"); this.writeUTFBytes ("RCPT TO: <"+reciver+">\r\n"); this.writeUTFBytes ("DATA\r\n"); this.writeUTFBytes ("From : "+sender+"\r\n"); this.writeUTFBytes ("To : "+reciver+"\r\n"); this.writeUTFBytes ("Subject: "+subject+"\r\n"); this.writeUTFBytes ("Mime-Version: 1.0\r\n"); this.writeUTFBytes ("Content-Type: text/html; charset=UTF-8; format=flowed\r\n"); this.writeUTFBytes (msg+"\r\n"); this.writeUTFBytes (".\r\n"); } catch(e:IOError) { trace(e); } flush();}
La función recibimos los siguientes datos
sender: El correo de la persona que envía
reciver: A quien va dirigido el mail
subject: Asunto del correo
msg: Cuerpo del mensaje en si
Luego el método writeUTFBytes se encarga de escribir datos en el flujo del socket. Los datos escritos utilizando este método no son transmitidos inmediatamente si no que se colocan en cola y son transmitidos una vez que se ejecuta el método flush(), que tenemos más abajo.
EXTRAIDO: de cristalab.com