学IT就来ACCP教程网
您的位置:ACCP教程网图文教程flex教程 ┳ 内容

flex使用smtp协议发邮件实例

时间:2010-06-04 11:10:31 |来源:网络 |作者:秩名 |点击:

从来没用过flex的socket,今天无聊就写了个smtp的发邮件小程序,顺便复习了下smtp协议,别的不说,直接贴代码吧。

mail.as:

 
  1. package mail  
  2. {  
  3.     import flash.events.Event;  
  4.     import flash.events.ProgressEvent;  
  5.     import flash.events.SecurityErrorEvent;  
  6.     import flash.net.Socket;  
  7.     import flash.utils.ByteArray;  
  8.       
  9.     import mx.controls.Alert;  
  10.     import mx.formatters.DateFormatter;  
  11.       
  12.     public class Mail  
  13.     {  
  14.         private var socket:Socket;  
  15.         private var isLogin:Boolean = false;  
  16.         private var smtp:String;  
  17.           
  18.         public function Mail(smtp:String)  
  19.         {  
  20.             initSocket(smtp);  
  21.         }  
  22.           
  23.         public function initSocket(smtp:String):void  
  24.         {  
  25.             this.smtp = smtp;  
  26.             if(socket==null || !socket.connected)  
  27.             {  
  28.                 socket = new Socket();  
  29.                 socket.connect(smtp,25);  
  30.                 socket.addEventListener(Event.CONNECT,ConnectionHandler);  
  31.                 socket.addEventListener(Event.CLOSE,CloseHandler);  
  32.                 socket.addEventListener(ProgressEvent.SOCKET_DATA,ReceiveHandler);  
  33.                 socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR,ErrorHandler);  
  34.             }  
  35.         }  
  36.           
  37.         private function ErrorHandler(evt:SecurityErrorEvent):void  
  38.         {  
  39.             trace("error!");  
  40.         }  
  41.           
  42.         public function ConnectionHandler(evt:Event):void  
  43.         {  
  44.             trace(" 链接成功");  
  45.         }  
  46.           
  47.         public function CloseHandler(evt:Event):void  
  48.         {  
  49.             isLogin = false;  
  50.             trace("已经从服务器断开");  
  51.         }  
  52.           
  53.         private function ReceiveHandler(evt:Event):void  
  54.         {  
  55.             var msg:String = "";  
  56.             while(socket.bytesAvailable)  
  57.             {  
  58.                 msg += socket.readMultiByte(socket.bytesAvailable,"utf8");  
  59.             }  
  60.             trace(msg);  
  61.         }  
  62.           
  63.         public function Send(user:String, pwd:String, mailFrom:String, mailTo:String,subject:String,content:String):void  
  64.         {  
  65.             if(socket==null || !socket.connected)  
  66.             {  
  67.                 initSocket(this.smtp);  
  68.             }  
  69.             sendMessage("HELO mail");  
  70.             if(!isLogin)  
  71.             {  
  72.                 sendMessage("AUTH LOGIN");  
  73.                 sendMessage(Base64.encode(user));  
  74.                 sendMessage(Base64.encode(pwd));  
  75.                 isLogin = true;  
  76.             }  
  77.             sendMessage("MAIL FROM: <"+mailFrom+">");  
  78.             sendMessage("RCPT TO: <"+mailTo+">");  
  79.             sendMessage("DATA");  
  80.             var dateFormatter:DateFormatter = new DateFormatter();  
  81.             dateFormatter.formatString = "yyyy-mm-dd";  
  82.             sendMessage("Date: "+dateFormatter.format(new Date()));  
  83.             sendMessage("From: "+mailFrom);  
  84.             sendMessage("To: "+mailTo);  
  85.             sendMessage("Content-Type: text/html");  
  86.             sendMessage("Subject: "+subject);  
  87.             sendMessage("");  
  88.             sendMessage("");  
  89.             sendMessage(content);  
  90.             sendMessage(".");  
  91.         }  
  92.         internal function sendMessage(msg:String):void  
  93.         {  
  94.             var message:ByteArray = new ByteArray();  
  95.             message.writeUTFBytes(msg+"\r\n");  
  96.             socket.writeBytes(message);  
  97.             socket.flush();  
  98.         }  
  99.     }  
  100. }  

这里用户名,密码要进行base64编码,用的是别人写的一个现成的类,下载地址是:http://dynamicflash.com/downloads/base64/Base64-1.1.0.zip
解压后直接把src里面的as文件拷贝到工程下就行了,记得要改包名。

首页上的测试代码是:

 
  1. <mx:Script>  
  2.         <![CDATA[  
  3.             import mail.Mail;  
  4.             import mail.Base64;  
  5.             import mx.controls.Alert;  
  6.               
  7.             private var xmlSocket:Socket;  
  8.             private var m:Mail;  
  9.               
  10.             private function init():void  
  11.             {  
  12.                 m = new Mail("smtp.qq.com");  
  13.             }  
  14.               
  15.             public function login():void  
  16.             {  
  17.                 Alert.show("aa");  
  18.                 m.Send("用户名","密码","发送方地址","接受方地址","测试","病毒");  
  19.             }  
  20.         ]]>  
  21.     </mx:Script>  

执行login就行了,我用的是qq邮箱测试的,可能要打开qq邮箱的smtp功能,在邮箱-->设置-->账户里面就可以更改设置。其他的我没有测试,测试了的朋友可以告诉我下结果哈。

顶一下
(0)
0%
踩一下
(0)
0%
loading.. 评论加载中....