- 浏览: 236038 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
lliiqiang:
打开多个页面就没有办法同时提交了。
jsp 表单防止重复提交(简单版) -
mponeno:
check,只是判断空的,应该没什么所谓,用StringUti ...
java判断文件是否为图片 已图片后缀名为依据 -
puqingluochen:
源码能打包发给我吗,谢谢了。
Extjs Grid 编辑 新增 删除 保存 (爽) -
java麦克斯泰:
getJSONString()
这个方法都没调用 不是完整 ...
extjs tree异步加载 完整版 -
yehoubin:
你好,我的虚拟机上的是Mac OS X leopard的,可以 ...
iPad 和 iPhone Simulator Mac.OS.X.Leopard
在GCF中并没有提供给我们能够发送电子邮件的API,J2ME的可选包也没有提供相关的功能。那么我们能用J2ME实现发送电子邮件功能嘛?答案是肯定的。本文将主要讲述如何在J2ME中实现发送电子邮件的功能。
这里一个非常重要的思想就是代理。我们知道GCF提供给我们进行联网的能力了,比如通过Http联网。在MIDP2.0中甚至提供了socket联网的API。那么我们可以通过他们连接服务器端的程序比如servlet,然后servlet可以通过JavaMail提供的接口发送邮件。那么我们需要做的只是通过Http协议或者其他协议把邮件的标题、内容、收件人等发送给servlet。就是这个简单的思想却是非常灵活非常有用。
首先我们构造一个Message类来代表发送的消息。它包括主题、收件人和内容三个字段。
package com.j2medev.mail;
public class Message
{
private String to;
private String subject;
private String content;
public Message()
{
}
public Message(String to, String subject, String content)
{
this.to = to;
this.subject = subject;
this.content = content;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
public String getSubject()
{
return subject;
}
public void setSubject(String subject)
{
this.subject = subject;
}
public String getTo()
{
return to;
}
public void setTo(String to)
{
this.to = to;
}
public String toString()
{
return to+subject+content;
}
}
在用户界面的设计上,我们需要两个界面。一个让用户输入收件人和主题,另一个用于收集用户输入的内容。由于TextBox要独占一个屏幕的,因此我们不能把他们放在一起。
/*
* Created on 2004-12-8
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.j2medev.mail;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
/**
* @author P2800
*
* TODO To change the template for this generated type comment go to Window -
* Preferences - Java - Code Style - Code Templates
*/
public class MainForm extends Form implements CommandListener
{
private MailClient midlet;
private TextField toField;
private TextField subField;
private boolean first = true;
public static final Command nextCommand = new Command("NEXT", Command.OK, 1);
public MainForm(MailClient midlet, String arg0)
{
super(arg0);
this.midlet = midlet;
if(first)
{
first = false;
init();
}
}
public void init()
{
toField = new TextField("To:", null, 25, TextField.ANY);
subField = new TextField("Subject:", null, 30, TextField.ANY);
this.append(toField);
this.append(subField);
this.addCommand(nextCommand);
this.setCommandListener(this);
}
public void commandAction(Command cmd,Displayable disp)
{
if(cmd == nextCommand)
{
String to = toField.getString();
String subject = subField.getString();
if(to == "" && subject == "")
{
midlet.displayAlert("Null to or sub",AlertType.WARNING,this);
}
else
{
midlet.getMessage().setTo(to);
midlet.getMessage().setSubject(subject);
midlet.getDisplay().setCurrent(midlet.getContentForm());
}
}
}
}
package com.j2medev.mail;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.TextBox;
import javax.microedition.midlet.MIDlet;
public class ContentForm extends TextBox implements CommandListener
{
private MailClient midlet;
private boolean first = true;
public static final Command sendCommand = new Command("SEND", Command.ITEM,
1);
public ContentForm(String arg0, String arg1, int arg2, int arg3,
MailClient midlet)
{
super(arg0, arg1, arg2, arg3);
this.midlet = midlet;
if (first)
{
first = false;
init();
}
}
public void init()
{
this.addCommand(sendCommand);
this.setCommandListener(this);
}
public void commandAction(Command cmd, Displayable disp)
{
if (cmd == sendCommand)
{
String content = this.getString();
midlet.getMessage().setContent(content);
System.out.println(midlet.getMessage());
try
{
synchronized (midlet)
{
midlet.notify();
}
} catch (Exception e)
{
}
}
}
}
最后我们完成MIDlet,在其中包括联网的程序代码,由于本站已经提供了很多关于J2ME联网的介绍,因此这里不再进行更多的解释。
package com.j2medev.mail;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
public class MailClient extends MIDlet
{
private MainForm mainForm;
private ContentForm contentForm;
private Display display;
private Message message;
public Message getMessage()
{
return message;
}
public void setMessage(Message message)
{
this.message = message;
}
public void displayAlert(String text, AlertType type, Displayable disp)
{
Alert alert = new Alert("Application Error");
alert.setString(text);
alert.setType(type);
alert.setTimeout(2000);
display.setCurrent(alert, disp);
}
public ContentForm getContentForm()
{
return contentForm;
}
public Display getDisplay()
{
return display;
}
public MainForm getMainForm()
{
return mainForm;
}
public void initMIDlet()
{
MailThread t = new MailThread(this);
t.start();
message = new Message();
display = Display.getDisplay(this);
mainForm = new MainForm(this, "Simple Mail Client");
contentForm = new ContentForm("Content", null, 150, TextField.ANY, this);
display.setCurrent(mainForm);
}
protected void startApp() throws MIDletStateChangeException
{
initMIDlet();
}
protected void pauseApp()
{
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException
{
}
}
class MailThread extends Thread
{
private MailClient midlet;
public MailThread(MailClient midlet)
{
this.midlet = midlet;
}
public void run()
{
synchronized(midlet)
{
try
{
midlet.wait();
}
catch(Exception e)
{
e.printStackTrace();
}
}
System.out.println("connecting to server.....");
HttpConnection httpConn = null;
DataOutputStream dos = null;
try
{
httpConn = (HttpConnection)Connector.open("http://localhost:8088/mail/maildo");
httpConn.setRequestMethod("POST");
dos = new DataOutputStream(httpConn.openOutputStream());
dos.writeUTF(midlet.getMessage().getTo());
dos.writeUTF(midlet.getMessage().getSubject());
dos.writeUTF(midlet.getMessage().getContent());
dos.close();
httpConn.close();
System.out.println("end of sending mail");
}
catch(IOException e)
{}
}}
在服务器端,我们要完成自己的servlet。他的任务比较简单就是接受客户端的数据然后通过JavaMail发送到指定的收件人那里。如果您对JavaMail还不熟悉请参考如下文章。这里直接给出servlet代码。
使用JavaMail实现收发电子邮件功能
使用Servlet发送电子邮件
package com.j2medev.servletmail;
import java.io.DataInputStream;
import java.io.IOException;
import java.util.Properties;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.*;
import java.net.*;
public class MailServlet extends HttpServlet
{
private static String host;
private static String from;
public void init(ServletConfig config) throws ServletException
{
super.init(config);
host = config.getInitParameter("host");
from = config.getInitParameter("from");
System.out.println(host + from);
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException
{
DataInputStream dis = new DataInputStream(request.getInputStream());
String send = dis.readUTF();
String subject = dis.readUTF();
String content = dis.readUTF();
try
{
Properties props = System.getProperties();
// Setup mail server
props.put("mail.smtp.host", host);
// Get session
Session session = Session.getDefaultInstance(props, null);
// Define message
MimeMessage message = new MimeMessage(session);
// Set the from address
message.setFrom(new InternetAddress(from));
// Set the to address
message.addRecipient(Message.RecipientType.TO, new InternetAddress(
send));
// Set the subject
message.setSubject(subject);
// Set the content
message.setText(content);
// Send message
Transport.send(message);
} catch (Exception e)
{
e.printStackTrace();
}
}
}
web.xml
<?xml version="1.0" ?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>ServletMail</servlet-name>
<servlet-class>com.j2medev.servletmail.MailServlet</servlet-class>
<init-param>
<param-name>host</param-name>
<param-value>smtp.263.net</param-value>
</init-param>
<init-param>
<param-name>from</param-name>
<param-value>eric.zhan@263.net</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletMail</servlet-name>
<url-pattern>/maildo</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>
</web-app>
总结:本文更多要介绍的其实还是这个代理的思想,利用所学的知识灵活应用。不要局限于J2ME提供给你的API。文章中实现的客户端服务器都比较简单,也不够友好,如果感兴趣可以稍微修饰一下,对提高能力还是有帮助的。在MIDP中只是提供了RMS作为持久存储用,因此实现接受存储邮件不是很方便。如果手机支持FileConnection的话可以编写一个接受邮件的客户端。
发表评论
-
点阵字库在J2ME中的实现
2010-02-05 14:05 1173点阵字库在J2ME中的实现 关于点阵字库在J ... -
J2ME移植到ophone
2009-11-12 09:10 1051中国拥有世界最庞大的电信客户群,仅移动用户就达7亿,3G在中国 ... -
手机编程关于socket实例代码
2009-11-13 23:39 1203最近有很多网友也许是刚刚接触socket 这个套接字 协议通讯 ... -
KXML:J2ME中的XML语法分析利器
2009-11-19 15:19 1462Enhydra的KXML是一个只占 ... -
J2ME 下的 Base64的编码与解码
2009-11-23 12:05 1263以前以为用J2EE里面的rt.jar 就能成功的引入到j2me ... -
五十音图
2009-11-27 11:34 1410日语的每个假名代表一 ... -
J2me蓝牙打印开发
2009-12-19 21:49 1771Java代码 Stringurl=ser ... -
WM 注册表 常用设置
2010-01-21 17:36 35801、注册表内容 大致上可以分为四组 HKEY_CLASSES_ ... -
iPad 和 iPhone Simulator Mac.OS.X.Leopard
2010-01-29 17:13 14496这两天玩了玩 XP 系统 通过vmware 装个 Mac. ... -
J2ME开发模拟器KEmulator简介及使用
2010-01-17 16:23 3833j2me开发中少不了每天跟 ... -
J2ME 使用的字体 Font 类
2009-12-23 10:01 1301在J2ME手机编程中使用字体 在J2ME手机编程中,可以 ... -
J2ME 发短信 实例
2009-12-21 20:17 1965package com.wanchong.duanxin; ... -
j2me中的文件操作包JSR75入门讲解
2009-12-13 15:38 2179JSR 75(PDA Optional Packages fo ... -
J2ME 文件下载实例 jar包为例
2009-12-13 14:56 3360package com.wanchong; /** * 作者 ... -
J2ME 文件操作
2009-12-13 12:04 1715package com.dw.contactadapter.b ... -
J2ME 图片下载实例 简洁明了
2009-12-13 11:43 1362package com.wanchong; /** * 作者 ... -
J2ME文件上传实例(FileConnector链接文件系统,非RMS)
2009-12-13 11:36 1398客户端: import java.io.InputStre ... -
汉诺塔程序的j2me实现(触摸屏)
2009-09-05 01:01 1408汉诺塔程序的j2me实现(触摸屏) import javax ... -
手机触摸屏程序开发
2009-08-09 17:32 1889使用J2ME技术实现手机触摸屏开发的方法: 首先的修改调试 ... -
Socket模拟Http协议
2009-05-20 14:55 1520接收数据方法: /**/ /// <summ ...
相关推荐
2.1.2 电子邮件发送和接收的基本原理 邮件发送通常使用SMTP协议,将邮件从本地服务器发送到目标服务器;接收则使用POP3或IMAP协议,从远程服务器下载邮件至本地设备。 2.1.3 电子邮件地址的构成和格式 电子邮件地址...
在Java 2 Micro Edition (J2ME)平台上开发应用程序时,有时我们需要实现基本的电子邮件功能。J2ME是Java的一个轻量级版本,主要用于移动设备和嵌入式系统,因此它的API可能没有Java Standard Edition (Java SE)那么...
J2ME中的`javax.wireless.messaging`包提供了用于发送和接收消息的功能,如电子邮件。`MIMEMessage`类用于构建复杂的邮件,而`MessageConnection`接口则处理邮件的发送和接收。 4. **用户界面** MIDP提供了基础的...
在J2ME中开发邮件系统,主要是利用JavaMail API来实现邮件的发送功能。本文将深入探讨如何在J2ME平台上构建一个简单的邮件系统,以及涉及到的关键技术和步骤。 1. **JavaMail API**:JavaMail API是Java环境中处理...
- 利用J2ME API实现简单的电子邮件发送功能。 - 配置邮件服务器设置。 #### 六、游戏开发 - **游戏编程基础**: - 学习J2ME Game API的基础知识。 - 实现基本的游戏逻辑和图形绘制。 - **游戏开发实践**: - ...
而网络连接功能则允许应用程序通过无线网络获取数据,实现在线服务,如浏览网页、发送电子邮件或者下载更新。 在Java移动通信程序设计中,开发者会学习到如何使用MIDP的CLDC(Connected Limited Device ...
用J2ME实现简单电子邮件发送功能.........................................................................40 游戏栏目........................................................................................
一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源代码...
一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...
一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...
一个简单的CS模式的聊天软件,用socket实现,比较简单。 凯撒加密解密程序 1个目标文件 1、程序结构化,用函数分别实现 2、对文件的加密,解密输出到文件 利用随机函数抽取幸运数字 简单 EJB的真实世界模型(源...
Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:...
Java圆形电子时钟源代码 1个目标文件 内容索引:JAVA源码,系统相关,电子钟 用JAVA编写的指针式圆形电子钟,效果图如下所示,其实代码很简单,希望对你有帮助。 Message-Driven Bean EJB实例源代码 2个目标文件 摘要:...
- **基于SNMP的网络管理软件的设计**:开发支持简单网络管理协议(SNMP)的网络管理工具,实现网络设备的集中管理。 - **基于NetFlow的网络流量分析系统设计**:构建一个用于监控网络流量的系统,优化网络资源分配。...
通过JavaMail API,实验者可以学习如何使用Java发送和接收电子邮件。 5. 实验五:JSP程序设计 JSP(JavaServer Pages)是用于动态网页开发的,实验者将学习如何结合Java和HTML创建交互式的Web应用。 6. 实验六:...
6.1 RecordStore:JME提供了RecordStore类,允许应用程序在设备上保存和读取小量数据,实现简单的数据持久化。 6.2 RMS扩展:开发者可以利用RecordManagementSystem类进行更复杂的数据管理,如创建多个RecordStore...
此外,还包括多媒体应用程序,如音频、视频、测试工具、电话、短信、彩信、WAP浏览、电子邮件、SIP、H.324/MPTT、AT命令、MIDI、MP3、MPEG4、H.263等。平台还支持J2ME Java应用程序和DAL(Device Access Layer),...