- File file = new File(path + File.separatorChar + names[cur]);
- FileInputStream fis = new FileInputStream(file);
- Stream stream = new Stream(fis);
- Address envelopeFrom = null;
- Address envelopeTo = null;
- for(String s = stream.readln(); s != null; s = stream.readln()) {
- if (s.startsWith("X-org.ibex.mail.headers.envelope.From: "))
- envelopeFrom = Address.parse(s.substring(38).trim());
- else if (s.startsWith("X-org.ibex.mail.headers.envelope.To: "))
- envelopeTo = Address.parse(s.substring(36).trim());
- else {
- stream.unread(s + "\r\n");
+ return Message.newMessage(new Fountain.File(file()));
+ //} catch (IOException e) { throw new MailException.IOException(e);
+ } catch (Message.Malformed e) { throw new MailException(e.getMessage());
+ } finally { if (fis != null) try { fis.close(); } catch (Exception e) { /* DELIBERATE */ } }
+ }
+ }
+
+ public static class Servlet extends HttpServlet {
+ public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { doGet(request, response); }
+ private void frames(HttpServletRequest request, HttpServletResponse response, boolean top) throws IOException {
+ String basename = request.getRequestURI();
+ PrintWriter pw = new PrintWriter(response.getWriter());
+ pw.println("<html>");
+ if (top) {
+ pw.println(" <frameset rows='10%,30%,*'>");
+ pw.println(" <frame src='"+basename+"?frame=banner' marginwidth=0 marginheight=0 name=banner/>");
+ pw.println(" <frame src='"+basename+"?frame=top' marginwidth=0 marginheight=0 name=top/>");
+ pw.println(" <frame src='"+basename+"?frame=bottom' marginwidth=0 marginheight=0 name='bottom'/>");
+ } else {
+ pw.println(" <frameset cols='150,*'>");
+ pw.println(" <frame src='"+basename+"?frame=topleft' marginwidth=0 marginheight=0 name=topleft/>");
+ pw.println(" <frame src='"+basename+"?frame=topright' marginwidth=0 marginheight=0 name=topright/>");
+ }
+ pw.println(" </frameset>");
+ pw.println("</html>");
+ pw.flush();
+ }
+
+ public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ String frame = request.getParameter("frame");
+ String basename = request.getRequestURI();
+
+ if (frame == null) { frames(request, response, true); return; }
+ if (frame.equals("top")) { frames(request, response, false); return; }
+ if (frame.equals("banner")) { banner(request, response); return; }
+ if (frame.equals("topleft")) { return; }
+
+ if (request.getServletPath().indexOf("..") != -1) throw new IOException(".. not allowed in image paths");
+ ServletContext cx = getServletContext();
+ String path = cx.getRealPath(request.getServletPath());
+ Mailbox mbox = FileBasedMailbox.getFileBasedMailbox(path, false);
+ if (mbox == null) throw new IOException("no such mailbox: " + path);
+
+ Vec msgs = new Vec();
+ for(Mailbox.Iterator it = mbox.iterator(); it.next();) {
+ String[] s = new String[4];
+ Message m = it.cur();
+ s[0] = (m.from==null?"":m.from.toString(true));
+ s[1] = m.subject;
+ s[2] = (m.date + "").trim().replaceAll(" "," ");
+ s[3] = it.num() + "";
+ msgs.addElement(s);
+ }
+ String[][] messages;
+ msgs.copyInto(messages = new String[msgs.size()][]);
+
+ if ("bottom".equals(frame)) { bottom(request, response, messages, mbox); return; }
+ if ("topright".equals(frame)) { topright(request, response, messages); return; }
+ }
+
+ private void bottom(HttpServletRequest request, HttpServletResponse response, String[][] messages, Mailbox mbox)
+ throws IOException {
+ PrintWriter pw = new PrintWriter(response.getWriter());
+ pw.println("<html>");
+ pw.println(" <body>");
+ pw.println(" <pre>");
+ if (request.getParameter("msgnum") != null) {
+ int target = Integer.parseInt(request.getParameter("msgnum"));
+ for(Mailbox.Iterator it = mbox.iterator(); it.next();) {
+ if (it.num() == target) {
+ StringBuffer tgt = new StringBuffer();
+ it.cur().getBody().getStream().transcribe(tgt);
+ pw.println(tgt.toString());