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)