Flash builder邮件发送的实现
?
Flash builder邮件发送的实现 ? Flash builder要发送邮件,常见实现方法主要有两种,一种是使用Flash builder的Stock类与邮件服务器直接通信;另一种是通过后台处理邮件发送,Flash Builder只是负责前端信息的封装。 首先简单介绍第一种方法,多数邮件服务器使用stock端口25,使用的通信协议是SMTP,如果是中文的非ASCII字符邮件还有知道MIME协议的内容。Stock端口和SMTP协议先不说了,现在所说MIME协议规范介绍。SMTP是传输ASCII 7位字符,第八位必须是零,如果一封中文邮件使用gb2312等编码就不能直接传输,因为接收方收到乱码邮件甚至发送出错,还有早期邮件协议只考虑传输纯文本,发展到后来为了解决可以传输复杂的附件,于是引入MIME协议,它主要就是解决这两个问题及如何编码。 SMTP是一个相对简单的基于文本的协议,如果与SMTP服务器建立通信,就可以发送经过MIME格式编码的邮件,基于这种想法,俺尝试使用Flash Builder直接发送邮件。实际上,在编写程序和测试上需要解决这几个问题: 1.?????? 编写连接SMTP服务器及发送mail的类; 2.?????? 邮件内容Base64编码; 3.?????? 解决Flash AS3 Socket类不能访问低于1024端口; 4.?????? 由于要解决第三个问题,需要一个跨域策略文件,如何放置这个文件; 基于第一种使用Flash builder的Stock类与邮件服务器直接通信方式,留待日后讨论,下面介绍另一种是通过后台处理邮件发送,这种比第一种方式容易多了,因为使用Java来发邮件,需要使用一个apache的email开源项目,有这个开源类库,一切都非常简单。 建立一个Java类MailNotification.java,用于发送邮件: 引入apache的email开源项目类库 import org.apache.commons.mail.DefaultAuthenticator; import org.apache.commons.mail.Email; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.SimpleEmail; ? public class MailNotification { ???????? 定义SMTP连接参数,如服务器地址,认证帐号及密码,端口等等; ? ???????? private final String MAILHOST="smtp.gmail.com"; ???????? private final String MAIL_AUTHENTICATOR_USER="nba1994@gmail.com"; ???????? private final String MAIL_AUTHENTICATOR_USERPASSWORD="nba1994"; ???????? private final String MAIL_FROM="nba1994@gmail.com"; ???????? private final String MAIL_CHARSET="gb2312"; ???????? private final int MAIL_SMTPPORT=587; ???????? 定义发邮件方法,可以由Flash builder远程调用,参数是收件人,邮件标题,邮件内容 ???????? public boolean SendMail(String _mailto, ??????????????????????????? ?????????????????????????? String _mailsubject, ??????????????????????????? ?????????????????????????? String _mailmessage ???????? ?????? ??????????????){ ?????????????????? Email email = new SimpleEmail(); ?????????????????? email.setHostName(MAILHOST); ?????????????????? email.setSmtpPort(MAIL_SMTPPORT); ?????????????????? email.setCharset(MAIL_CHARSET); ?????????????????? email.setAuthenticator(new DefaultAuthenticator(MAIL_AUTHENTICATOR_USER,MAIL_AUTHENTICATOR_USERPASSWORD)); ?????????????????? email.setTLS(true); ?????????????????? try { ??????????????????????????? email.setFrom(MAIL_FROM); ??????????????????????????? email.setSubject(_mailsubject); ??????????????????????????? email.setMsg(_mailmessage); ??????????????????????????? email.addTo(_mailto); ??????????????????????????? email.send(); ?????????????????? } catch (EmailException e) { ??????????????????????????? // TODO Auto-generated catch block ??????????????????????????? e.printStackTrace(); ??????????????????????????? return false; ?????????????????? } ?????????????????? System.out.println("邮件发送成功"); ?????????????????? return true; ???????? } ? 类结束标志; } ? 由于使用LCDS的远程调用方法,需要在remoting-config.xml定义一个destination: <destination id="echo3007A"> ???????? ??? <channels> ???????????? <channel ref="my-nio-amf"/> ??????? </channels> ??????? <properties> ????? ???????<source>com.les.java3007.MailNotification</source> ??????????????????????????? ?<scope>request</scope> ??????? </properties>?????????? </destination> ? Flashbuilder测试文件,俺将这个功能写成一个模块 ? <?xml version="1.0" encoding="utf-8"?> <s:Module xmlns:fx="http://ns.adobe.com/mxml/2009" ??????? ? xmlns:s="library://ns.adobe.com/flex/spark" ??????? ? xmlns:mx="library://ns.adobe.com/flex/mx" ??????? ? xmlns:services="services.*" ??????? ? width="400" height="300"> ??? <fx:Script> ??????? <![CDATA[ ??????????? import mx.controls.Alert; ??????????? import mx.rpc.events.ResultEvent; ??????????? ??????????? protected function button_clickHandler(event:MouseEvent):void ??????????? { ??????????????? SendMailResult.token = parentApplication.echo3007A.SendMail( _textinput01.text,_textinput02.text,_textinput03.text); ??????????? } ??????????? ??????????? ??????????? protected function SendMailResult_resultHandler(event:ResultEvent):void ??????????? { ??????????????? // TODO Auto-generated method stub ??????????????? if (event.result as Boolean){ ??????????????????? Alert.show("邮件发送成功"); ??????????????? }else{ ??????????????????? Alert.show("邮件发送失败"); ??????????????? } ??????????? } ??????????? ??????? ]]> ??? </fx:Script> ??? <fx:Declarations> ??????? <s:CallResponder id="SendMailResult" result="SendMailResult_resultHandler(event)"/> ??????? <!-- 将非可视元素(例如服务、值对象)放在此处 --> ??? </fx:Declarations> ??? <s:Button id="button" x="63" y="213" label="按钮" click="button_clickHandler(event)"/> ??? <s:Label x="63" y="57" text="收件人"/> ??? <s:Label x="63" y="92" text="题目"/> ??? <s:Label x="63" y="120" text="内容"/> ??? <s:TextInput id="_textinput01" x="120" y="52" text="nba1994@21cn.com"/> ??? <s:TextInput id="_textinput02" x="120" y="82" text="TestMail天天向上"/> ??? <s:TextInput id="_textinput03" x="120" y="112" width="232" text="This is a test mail 好好学习... :-)"/> </s:Module> ? ? 按button键,5秒之后看结果: ? ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |