| 在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()); } } } }
|