返回 导航

Flex

hangge.com

Flex - 制作一个邮件接收应用(使用Socket通讯协议)

作者:hangge | 2015-04-08 09:50
使用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>
评论

全部评论(0)

回到顶部