近来在做邮件项目时候,我发现as有那么强大的逻辑能力,为什么不用来发送email。发送email时候,我们还可以把压力留给用户,留在前台,那么后台可以减负,在一些需要大量发送信息的系统中,无疑有一定的用处的。
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();
}
}
}
调用类
private var xmlSocket:Socket;
private var m:MailUtil;
private function init():void
{
m = new MailUtil("smtp.163.com");
}
public function login():void
{
m.Send("arjick@163.com","password","arjick@163.com","348700730@qq.com","测试4","测试");
}
]]-->
</mx:Script>
<mx:VBox width="100%">
<mx:Button id="testEmail" label="测试" click="{login()}" />
</mx:VBox>
</mx:Application>
这个类发送还有有错误,安全策略问题和容错问题