Flex - 制作一个邮件接收应用(使用Socket通讯协议)
使用Socket协议我们可以制作一个邮箱应用,功能如下:


代码如下:
1,填写邮箱服务地址,端口,用户,密码即可连接到邮箱(比如163邮箱)
2,发送list命令,即可获取邮箱的邮件列表
3,发送retr id,即可获取具体的邮件内容(id为相应的邮件编号)
效果图如下:



<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="initApp()"> <fx:Script> <![CDATA[ //导入相关事件 import flash.events.SecurityErrorEvent; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; //导入socket对象 import flash.net.Socket; //在读取数据时使用 import flash.utils.ByteArray; private var socket:Socket = new Socket(); internal function initApp():void{ //添加事件 socket.addEventListener(Event.CLOSE, closeHandler); socket.addEventListener(Event.CONNECT, connectHandler); socket.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); socket.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); } //连接中断事件 internal function closeHandler(evt:Event):void{ output("连接已关闭"); } //成功连上服务器 internal function connectHandler(evt:Event):void{ output("连接已建立"); } //连接错误信息 internal function ioErrorHandler(evt:IOErrorEvent):void{ output("IO错误:"+evt.text); } //安全错误 internal function securityErrorHandler(evt:SecurityErrorEvent):void{ output("安全错误:"+evt.text); } //开始连接 internal function doConnect():void{ var server:String = server_txt.text; var port:Number = Number(port_txt.text); var user:String = user_txt.text; var pass:String = pass_txt.text; //连接 socket.connect(server,port); //发送验证消息 sendMessage("user "+user); sendMessage("pass "+pass); } //接收服务器数据 internal function socketDataHandler(evt:ProgressEvent):void{ var msg:String = ''; //循环读取数据 while (socket.bytesAvailable){ //使用utf8避免乱码 msg += socket.readMultiByte(socket.bytesAvailable,"utf8"); } if(msg==''){ return; } //用\n把信息隔开 var arr:Array=msg.split('\n'); for(var i:int=0;i<arr.length;i++){ if(arr[i].length>1){ var myPattern:RegExp = /\r/; //删除信息中的回车 arr[i]=arr[i].replace(myPattern,''); output(arr[i]); } } } //发送数据到服务端 internal function sendMessage(msg:String):void{ //建立一个新的ByteArray存放数据 var message : ByteArray = new ByteArray (); //写入数据 message.writeUTFBytes (msg + "\r\n"); socket.writeBytes (message); //发送 socket.flush(); } //输出函数 internal function output(msg:String):void{ msg = msg +"\n"; output_txt.text += msg; } ]]> </fx:Script> <s:Panel x="370" y="34" width="360" height="336" title="输出信息"> <s:TextArea id="output_txt" width="100%" height="250" x="10" y="40"/> <s:TextInput width="244" x="10" y="10" id="input_txt" text="输入信息" enter="sendMessage(input_txt.text)"/> <s:Button label="发送指令" x="273" y="10" width="65" click="sendMessage(input_txt.text)"/> </s:Panel> <s:Panel x="42" y="34" width="294" height="263" title="登陆窗口"> <s:Label text="服务器地址:" x="13" y="24"/> <s:TextInput width="131" x="98" y="23" id="server_txt" text="pop.163.com"/> <s:TextInput width="131" x="98" y="56" id="port_txt" text="110"/> <s:Label text="端口:" x="49" y="57"/> <s:Label text="用户名:" y="92" x="37"/> <s:TextInput width="131" x="98" y="91" id="user_txt"/> <s:Label text="密码:" x="49" y="130"/> <s:TextInput width="131" x="98" y="129" displayAsPassword="true" id="pass_txt"/> <s:Button label="连接" x="77" y="174" width="116" click="doConnect()"/> </s:Panel> </s:Application>