加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flash builder邮件发送的实现

发布时间:2020-12-15 06:57:42 所属栏目:百科 来源:网络整理
导读:? Flash builder邮件发送的实现 ? Flash builder要发送邮件,常见实现方法主要有两种,一种是使用Flash builder的Stock类与邮件服务器直接通信;另一种是通过后台处理邮件发送,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秒之后看结果:

?

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读