J2ME 無直連 SMTP 能力,採「代理模式」:MIDlet 經 HTTP 將郵件資料送至 Servlet,由 Servlet 調用 JavaMail 發送。本文設計資料模型與兩階段 UI。
public class Message {
private String to, subject, content;
// 建構子、getter/setter、toString() 略
}
MainForm (Form):輸入收件人、主題,按「NEXT」切換
public class MainForm extends Form implements CommandListener {
private TextField toField, subField;
private MailClient midlet;
public static final Command NEXT = new Command("NEXT", Command.OK, 1);
public void commandAction(Command c, Displayable d) {
if (c == NEXT) {
String to = toField.getString();
String sub = subField.getString();
if (to.isEmpty() && sub.isEmpty()) {
midlet.displayAlert("欄位不可空白", AlertType.WARNING, this);
} else {
midlet.getMessage().setTo(to);
midlet.getMessage().setSubject(sub);
midlet.getDisplay().setCurrent(midlet.getContentForm());
}
}
}
}
ContentForm (TextBox):輸入內容,按「SEND」觸發發送
public class ContentForm extends TextBox implements CommandListener {
private MailClient midlet;
public static final Command SEND = new Command("SEND", Command.ITEM, 1);
public void commandAction(Command c, Displayable d) {
if (c == SEND) {
midlet.getMessage().setContent(getString());
synchronized (midlet) { midlet.notify(); } // 喚醒 MailThread
}
}
}
此設計清晰分離資料蒐集與發送邏輯,配合代理模式,極適合資源受限的 J2ME 環境。