Siguiendo con las cosas buenas que trae ActionScript 3 hoy veremos como enviar correos desde flash utilizando solamente ActionScript. Para ello usaremos la clase 'Socket', que se encuentra dentro del paquete 'flash.net'.
Primero creemos una clase a la que llamaremos SendMail, en primera instancia importamos las clases a utilizar:
Código:
package clases {
//Importamos clases a utilizar
import flash.net.Socket;
import flash.errors.*;
import flash.events.*;
import flash.utils.*;
}
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 clase
Código:
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();
}
}
Dentro de las variables tenemos:
• 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:
private function configureListeners():void {
addEventListener(Event.CONNECT, connectHandler);
addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
}
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.
Código:
private 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();
}
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 enviados
Código:
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:
public function get IsConnect():Boolean{
return this.conectado;
}
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
Código:
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.
Esto es todo lo que necesitamos para enviar mails desde flash con AS3.
Espero que te ayude para lo que estas buscando.
Suerte