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