import javax.microedition.lcdui.*; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import javax.microedition.io.*; import java.io.InputStream; import java.io.PrintStream;
public class SendMail extends MIDlet implements CommandListener {
private String MAIL_SERVER_URL = "http://localhost:8080/examples/servlet/SendMailServlet?"; Display display = null; List dmenu = null; TextBox input = null; TextBox to =null; TextBox msg =null; String user = null; int status =0; Command backCommand = new Command("Back", Command.BACK, 0); Command submitCommand = new Command("Submit", Command.OK, 2); Command exitCommand = new Command("Exit", Command.STOP, 3); Command okCommand = new Command("OK", Command.OK, 0); String url = MAIL_SERVER_URL + "u=" + user; public SendMail() { } public void startApp() throws MIDletStateChangeException { display = Display.getDisplay(this); displayMenu(); } public void pauseApp() { } public void destroyApp(boolean unconditional) { notifyDestroyed(); } public void commandAction(Command c, Displayable d) { if(c == exitCommand ) { destroyApp(true); } else if (c == backCommand) { displayMenu(); } else if (c == submitCommand) { user = input.getString(); doLogin(user); } else if (c == okCommand) { t = new SendThread(input.getString(),to.getString(), msg.getString()); showAlert(t.getResponseMessage()); } else if (d == dmenu) { handleMainMenu(); } else loginUser(); } private void displayMenu() { dmenu = new List("Send Email", Choice.IMPLICIT); if (user == null) dmenu.append("Login", null); else dmenu.append("Logout", null); dmenu.append("Send Mail", null); dmenu.addCommand(exitCommand); dmenu.setCommandListener(this); display.setCurrent(dmenu); status = 0; } /* Este método pergunta ao usuário seu e-mail e sua senha */ private void loginUser() { input = new TextBox( "Digite Login/Password (Separado pela /) :", "", 25, TextField.ANY); input.addCommand(submitCommand); input.addCommand(backCommand); input.setCommandListener(this); display.setCurrent(input); } /* Este método executa o inicio de uma sessão */ private void doLogin(String user) { StreamConnection c = null; InputStream is=null; StringBuffer sb = null; String err = null; try { c = (StreamConnection)Connector.open(url, Connector.READ_WRITE); is = c.openInputStream(); int ch; sb = new StringBuffer(); while ((ch = is.read()) != -1) { sb.append((char)ch); } } catch(Exception ex){ err = ex.getMessage(); } finally { try { if(is!= null) {is.close(); } if(c != null) {c.close(); } } catch(Exception exp) { err = exp.getMessage(); } } if (err == null) { user = sb.toString(); if (user.indexOf("UsuarioInvalido") >= 0) { user = null; showAlert("Usuario e senha errados"); } else { input = null; dmenu = null; displayMenu(); } } else showAlert(err); // Necessário para a página de erro } private void showAlert(String err) { Alert a = new Alert(""); a.setString(err); a.setTimeout(Alert.FOREVER); display.setCurrent(a); } private void handleMainMenu() { int index = dmenu.getSelectedIndex(); switch(index) { case 0 : if (user != null) { sendeMail(); break; } case 1 : status = 1; loginUser(); break; } } /* Este método permite que o usuário cria a mensagem do e-mail*/ private void sendeMail() { List menu = new List("Enviar mensagem"); to = new TextBox("Para :", "", 50, TextField.ANY); msg = new TextBox("Mensagem :", "", 250, TextField.ANY); menu.append(to); menu.append(msg); menu.addCommand(okCommand); menu.addCommand(exitCommand); menu.setCommandListener(this); display.setCurrent(menu); } public class SendThread implements runnable { String user; String pwd; String to; String msg; public SendThread(String user,String to,String msg) { int j user.indexOf('/'); if (j > 0) { user = user.substring(0,j); pwd = user.substring(j+1); to = to; msg = msg; } } /*Este método ob´tem a resposta depois do e-mail ser enviado*/ public String getResponseMessage() { return responseMessage; } /* Este método envia um POST request para o servlet com os parêmtros
necessários*/ public void run() { HttpConnection hc = null; OutputStream out = null; try { hc = (HttpConnection)Connector.open(url); hc.setRequestMethod(HttpConnection.POST); hc.setRequestProperty("Content-Type", "text/plain"); out = hc.openOutputStream(); PrintStream pout = new PrintStream(out); pout.println(user); pout.println(pwd); pout.println(mEmail); pout.println(mMessage); InputStream in = hc.openInputStream(); int length = (int)hc.getLength(); if (length == -1) length = 255; byte[] raw = new byte[length]; in.read(raw); String s = new String(raw); String codeString = s.substring(0, 4).trim(); responseMessage = s.substring(4).trim(); } finally { if (hc != null) hc.close(); if (out != null) out.close(); } } } }
/*Servlet para enviar o e-mail*/ import java.io.*; import java.text.*; import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.servlet.http.*; import javax.servlet.*;
public class SendMailServlet extends HttpServlet { private String mMailServer; private DateFormat mDateFormat; public void init() { mMailServer = "SeuServidor.com"; mDateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { BufferedReader in = request.getReader(); String user = in.readLine(); String pwd = in.readLine(); String address = in.readLine(); StringBuffer content = new StringBuffer(); String line = null; while ((line = in.readLine()) != null) { content.append(line); content.append('\n'); } String message = "100 ok"; try { sendMail(mMailServer,user,pwd, address, content.toString()); } catch (Throwable t) { message = "200 " + t.toString(); } response.setContentType("text/plain"); response.setContentLength(message.length()); PrintWriter out = response.getWriter(); out.println(message); out.flush(); } /* Este método cria a mensagem e envia para o servidor*/ private void sendMail(String server, String user, String pwd, String address, String content) throws Exception { Properties p = new Properties(); p.put("mail.smtp.host", server); Session s = Session.getDefaultInstance(p, null); InternetAddress from = new InternetAddress(user); InternetAddress to = new InternetAddress(address); MimeMessage m = new MimeMessage(s); m.setFrom(from); m.addRecipient(Message.RecipientType.TO, to); String now = mDateFormat.format(new java.util.Date()); m.setSubject("Mail from [" + from + "]"); m.setText(content.toString()); Transport.send(m); } } |