純as發送email(Flex)

   近來在做郵件項目時候,我發現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>

這個類發送還有有錯誤,安全策略問題和容錯問題
發佈了13 篇原創文章 · 獲贊 3 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章