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秒之后看结果:

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值