本文主要介绍和实现怎么使用Flex-java来实现Email的发送。这尤其是在做用户回馈的时候需要用到。当然这实现的只要是一个简单的例子。正在执行发送Email功能还是使用java来实现的,Flex只不过提供了数据的输入和封装。使用的原理很简单:
Flex-Form <--接受用户输入
||
||使用RemoteObject方式就用户输入的数据封装成json格式传递到后台java bean
||
Java Bean()--->执行真正的Email发送----->回馈消息---->Flex-Form
使用的界面如下图:
以下是实现的代码:
- package mail;
- import javax.mail.*;
- import javax.mail.internet.*;
- import java.util.*;
- import net.sf.json.JSONArray;
- import net.sf.json.JSONObject;
-
- public class SendFlexMail {
- private static final String SMTP_HOST_NAME = "smtp.163.com";
- private static final String SMTP_AUTH_USER = "feixianryexin";
- private static final String SMTP_AUTH_PWD = "yourpassword";
-
-
-
- private String[] emailList;
- public String sendFlexMail(String flexMail){
- String result="";
- JSONArray flexJavaMail = JSONArray.fromObject(flexMail);
- emailList = new String[2];
- JSONObject mailJsonObj = JSONObject.fromObject(flexJavaMail.getString(0));
- emailList[0] = mailJsonObj.getString("senderEmail");
-
- emailList[1] = mailJsonObj.getString("sendToEmail");
- String senderName = mailJsonObj.getString("senderName");
- String sendToName = mailJsonObj.getString("sendToName");
- String senderMail = mailJsonObj.getString("senderEmail");
- String emailMessage = mailJsonObj.getString("emailMessage");
- String emailTopic = sendToName+":A Letter From Your Friend "+senderName;
- try{
- postMail(emailList,emailTopic, emailMessage,senderMail);
- result="Congratulations!";
- }catch (MessagingException e){
- e.printStackTrace();
- }
- return result;
- }
- public void postMail( String recipients[ ], String subject,
- String message , String from) throws MessagingException
- {
- boolean debug = false;
-
-
-
- Properties props = new Properties();
- props.put("mail.smtp.host", SMTP_HOST_NAME);
- props.put("mail.smtp.auth", "true");
-
- Authenticator auth = new SMTPAuthenticator();
- Session session = Session.getDefaultInstance(props, auth);
-
- session.setDebug(debug);
-
-
-
- Message msg = new MimeMessage(session);
-
-
-
- InternetAddress addressFrom = new InternetAddress(from);
- msg.setFrom(addressFrom);
-
- InternetAddress[] addressTo = new InternetAddress[recipients.length];
- for (int i = 0; i < recipients.length; i++)
- {
- addressTo[i] = new InternetAddress(recipients[i]);
- }
- msg.setRecipients(Message.RecipientType.TO, addressTo);
-
-
-
-
- msg.setSubject(subject);
- msg.setContent(message, "text/plain");
- Transport.send(msg);
- }
-
-
-
-
-
-
- private class SMTPAuthenticator extends javax.mail.Authenticator
- {
-
- public PasswordAuthentication getPasswordAuthentication()
- {
- String username = SMTP_AUTH_USER;
- String password = SMTP_AUTH_PWD;
- return new PasswordAuthentication(username, password);
- }
- }
-
- }
package mail; import javax.mail.*; import javax.mail.internet.*; import java.util.*; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class SendFlexMail { private static final String SMTP_HOST_NAME = "smtp.163.com"; private static final String SMTP_AUTH_USER = "feixianryexin"; private static final String SMTP_AUTH_PWD = "yourpassword"; // Add List of Email address to who email needs to be sent to private String[] emailList; public String sendFlexMail(String flexMail){ String result=""; JSONArray flexJavaMail = JSONArray.fromObject(flexMail); emailList = new String[2]; JSONObject mailJsonObj = JSONObject.fromObject(flexJavaMail.getString(0)); emailList[0] = mailJsonObj.getString("senderEmail");//send mail to yourself emailList[1] = mailJsonObj.getString("sendToEmail"); String senderName = mailJsonObj.getString("senderName"); String sendToName = mailJsonObj.getString("sendToName"); String senderMail = mailJsonObj.getString("senderEmail"); String emailMessage = mailJsonObj.getString("emailMessage"); String emailTopic = sendToName+":A Letter From Your Friend "+senderName; try{ postMail(emailList,emailTopic, emailMessage,senderMail); result="Congratulations!"; }catch (MessagingException e){ e.printStackTrace(); } return result; } public void postMail( String recipients[ ], String subject, String message , String from) throws MessagingException { boolean debug = false; //Set the host smtp address Properties props = new Properties(); props.put("mail.smtp.host", SMTP_HOST_NAME); props.put("mail.smtp.auth", "true"); Authenticator auth = new SMTPAuthenticator(); Session session = Session.getDefaultInstance(props, auth); session.setDebug(debug); // create a message Message msg = new MimeMessage(session); // set the from and to address InternetAddress addressFrom = new InternetAddress(from); msg.setFrom(addressFrom); InternetAddress[] addressTo = new InternetAddress[recipients.length]; for (int i = 0; i < recipients.length; i++) { addressTo[i] = new InternetAddress(recipients[i]); } msg.setRecipients(Message.RecipientType.TO, addressTo); // Setting the Subject and Content Type msg.setSubject(subject); msg.setContent(message, "text/plain"); Transport.send(msg); } /** * SimpleAuthenticator is used to do simple authentication * when the SMTP server requires it. */ private class SMTPAuthenticator extends javax.mail.Authenticator { public PasswordAuthentication getPasswordAuthentication() { String username = SMTP_AUTH_USER; String password = SMTP_AUTH_PWD; return new PasswordAuthentication(username, password); } } }
2.前台的Flex-Form:
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" viewSourceURL="srcview/index.html"> <mx:Script> <![CDATA[ import mx.controls.Alert; import mx.controls.TextInput; import mx.rpc.events.ResultEvent import mx.collections.ArrayCollection; import com.adobe.serialization.json.JSON; private var flexMail:ArrayCollection; public function sendMailAction( ):void { flexMail = new ArrayCollection(); var mailObj:Object = new Object(); mailObj.senderName = senderName.text; mailObj.senderEmail =senderEmail.text; mailObj.sendToName = sendToName.text; mailObj.sendToEmail = sendToEmail.text; mailObj.emailMessage =emailMessage.text; //check email valid if(senderName.text !="" && senderEmail.text!=""&&sendToName.text!=""&& sendToEmail.text!=""&& emailMessage.text!=""){ if(senderEmail.text.indexOf("@")==-1 || sendToEmail.text.indexOf("@")==-1){ labState.text="Email格式不正确哦!"; }else{ flexMail.addItem(mailObj); var emailString:String = JSON.encode(flexMail.toArray()); sendMail.sendFlexMail(emailString) labState.text="正在发送请稍候..."; } }else{ labState.text="请输入所有的选项!"; } } public function sendFlexMailResult(event:ResultEvent):void { Alert.show(event.result as String); senderName.text=""; senderEmail.text=""; sendToName.text=""; sendToEmail.text=""; emailMessage.text=""; labState.text="恭喜,成功发送邮件!"; } ]]> </mx:Script> <mx:Style source="mailFormCSS.css" /> <mx:RemoteObject id="sendMail" destination="sendFlexMail" showBusyCursor="true" result="sendFlexMailResult(event)" /> <mx:Panel width="448" height="474" > <mx:Text width="100%" height="29" text="Email Form" styleName="header"/> <mx:Text text="Flex3 / BlazeDS / Java" styleName="subHeader" /> <mx:HRule width="100%"/> <mx:Form id="emailForm" width="100%" > <mx:FormItem label="Your Name:" horizontalAlign="left" width="100%"> <mx:TextInput id="senderName" width="100%"/> </mx:FormItem> <mx:FormItem label="Your E-mail:" width="100%"> <mx:TextInput id="senderEmail" width="100%"/> </mx:FormItem> <mx:FormItem label="Friends Name:" horizontalAlign="left" width="100%"> <mx:TextInput id="sendToName" width="100%"/> </mx:FormItem> <mx:FormItem label="Friends E-mail:" width="100%"> <mx:TextInput id="sendToEmail" width="100%"/> </mx:FormItem> <mx:FormItem label="Message" horizontalAlign="left" width="100%"> <mx:TextArea id="emailMessage" width="100%" height="100"/> </mx:FormItem> <mx:FormItem width="100%" height="33"> <mx:Spacer width="200" /> <mx:Button id="submitBtn" label="Submit" click="sendMailAction()"/> </mx:FormItem> </mx:Form> <mx:HBox styleName="cbStyle" width="414"> <mx:Label id="labState" width="393" fontSize="14" color="#FE0113"/> <!-- <mx:CheckBox label="Check to send a copy to yourself" id="cb"/>--> </mx:HBox> <mx:HRule width="100%" height="0"/> <mx:Label styleName="footer"> <mx:htmlText><![CDATA[<a href="http://yexin218.cublog.cn" target="_blank" ><b>一路风尘制作</b></a>]]></mx:htmlText> </mx:Label> </mx:Panel> </mx:Application>
数据传递使用的是BlazeDS.关于BlazeDS参考:使用BlazeDS实现Java和Flex通信
附件下载【包含Flex-plugin的eclipse工程文件以及源码】:DownLoad
上一篇:
自定义Flex组件皮肤 下一篇:
创建伸缩和拖拽的flex组件