近來在做郵件項目時候,我發現as有那麼強大的邏輯能力,爲什麼不用來發送email。發送email時候,我們還可以把壓力留給用戶,留在前臺,那麼後臺可以減負,在一些需要大量發送信息的系統中,無疑有一定的用處的。
package com.shine.framework.mail.util
{
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;
import flash.net.Socket;
import flash.utils.ByteArray;
import mx.controls.Alert;
public class MailUtil
{
private var socket:Socket;
private var smtp:String;
private var _user:String;
private var _pwd:String;
private var _mailFrom:String;
private var _mailTo:String;
private var _subject:String;
private var _content:String;
private var num:int=99;
public function MailUtil(smtp:String)
{
initSocket(smtp);
}
public function initSocket(smtp:String):void
{
this.smtp = smtp;
if(socket==null || !socket.connected)
{
socket = new Socket();
socket.connect(smtp,25);
socket.addEventListener(Event.CONNECT,ConnectionHandler);
socket.addEventListener(Event.CLOSE,CloseHandler);
socket.addEventListener(ProgressEvent.SOCKET_DATA,ReceiveHandler);
socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,ErrorHandler);
}
}
private function ErrorHandler(evt:SecurityErrorEvent):void
{
Alert.show("error!");
Alert.show(String(evt.text));
}
public function ConnectionHandler(evt:Event):void
{
Alert.show("鏈接成功");
}
public function CloseHandler(evt:Event):void
{
Alert.show("已經從服務器斷開");
}
private function ReceiveHandler(evt:Event):void
{
var msg:String = "";
while(socket.bytesAvailable)
{
msg += socket.readMultiByte(socket.bytesAvailable,"utf8");
}
//Alert.show(msg);
if(num==0){
sendUserName(_user);
num++;
}else if(num==1){
sendPassword(_pwd);
num++;
}else if(num==2){
setFromandTo(_mailFrom,_mailTo);
num++;
}else if(num==3){
sendContent(_subject,_content);
num++;
}else if(num==4){
Alert.show("發送成功");
num++;
}
}
public function Send(user:String, pwd:String, mailFrom:String, mailTo:String,subject:String,content:String):void
{
if(socket==null || !socket.connected)
{
initSocket(this.smtp);
}
this._user=user;
this._pwd=pwd;
this._mailFrom=mailFrom;
this._mailTo=mailTo;
this._subject=subject;
this._content=content;
sendHello();
num=0;
}
private function sendHello():void{
sendMessage("HELO mail");
sendMessage("AUTH LOGIN");
}
private function sendUserName(user:String):void{
sendMessage(Base64.encode(user));
}
private function sendPassword(pwd:String):void{
sendMessage(Base64.encode(pwd));
}
private function setFromandTo(mailFrom:String,mailTo:String):void{
sendMessage("MAIL FROM: <"+mailFrom+">");
sendMessage("RCPT TO: <"+mailTo+">");
sendMessage("DATA");
}
private function sendContent(subject:String,content:String):void{
sendMessage("Content-Type: text/html");
sendMessage("Subject: "+subject);
sendMessage("");
sendMessage("");
sendMessage(content);
sendMessage(".");
}
internal function sendMessage(msg:String):void
{
var message:ByteArray = new ByteArray();
message.writeUTFBytes(msg+"/r/n");
socket.writeBytes(message);
socket.flush();
}
}
}
調用類
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="{init()}">
<mx:Script>
<!--[CDATA[
import com.shine.framework.mail.util.MailUtil;
import com.shine.framework.mail.util.Mail;
import com.shine.framework.mail.util.Base64;
import mx.controls.Alert;
private var xmlSocket:Socket;
private var m:MailUtil;
private function init():void
{
m = new MailUtil("smtp.163.com");
}
public function login():void
{
m.Send("[email protected]","password","[email protected]","[email protected]","測試4","測試");
}
]]-->
</mx:Script>
<mx:VBox width="100%">
<mx:Button id="testEmail" label="測試" click="{login()}" />
</mx:VBox>
</mx:Application>
這個類發送還有有錯誤,安全策略問題和容錯問題