// Copyright © 2002 by Apple Computer, Inc., All Rights Reserved.
//
// You may incorporate this Apple sample code into your own code
// without restriction. This Apple sample code has been provided "AS IS"
// and the responsibility for its operation is yours. You may redistribute
// this code, but you are not permitted to redistribute it as
// "Apple sample code" after having made changes.

shell>cat src/ListManageServlet.java 


import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;
import javax.rmi.*;
import javax.mail.*;
import javax.mail.internet.*;

public class ListManageServlet extends HttpServlet {

    private Context ctx;
    private MailListHome home;
    private PrintWriter out;

    public ListManageServlet() throws NamingException
    {
        try {
            ctx = new InitialContext();
            home = (MailListHome) PortableRemoteObject.narrow(ctx.lookup("MailList"),
                                                                 MailListHome.class);
        } catch (Exception e) { }
    }

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setContentType("text/html");
        out = response.getWriter();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Mailing List Manager</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");

        out.println("<h1> Email List: </h1>");

        // first, see if there is an address to remove

        String remove = request.getParameter("remove");
        if ( remove != null)
        {
            try
            {
                home.remove(remove);
            }
            catch (Exception e) { out.println(e.toString()); }
        }

        // print the list, along with "remove" links

        try 
        {
            Collection co = home.findAll();
            Iterator it = co.iterator();
            
            while (it.hasNext())
            {
                MailList ml = (MailList) it.next();
                out.println("email: " + ml.getEmail() );
                out.println("<a href=\"/MailList/Manage?remove=" + ml.getEmail() + "\">remove</a><br>");
            }
        }
        catch(Exception e)
        {
            out.println(e.toString());
        }

        // now display the "add" form

        out.println("<form action=\"/MailList/Manage\" method=\"post\">");
        out.println("<input type=\"text\" name=\"email\">");
        out.println("<input type=\"submit\" value=\"add\">");
    } 


    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Mailing List Manager</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");

        // add a new list member

        String email = request.getParameter("email");
        if ( email != "" && email != null)
        {
            try 
            {
                MailList ml = home.create(email);
                out.println("Added, thank you. <a href=\"/MailList/Manage\">Start again</a>.");
            } 
            catch (Exception e) { out.println(e.toString()); }
        }
        else
        {
            out.println("Please specify email address.");
        }
        out.println("</body>");
        out.println("</html>");
    }

}




shell> cat src/SendServlet.java       


import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.*;
import javax.rmi.*;
import javax.mail.*;
import javax.mail.internet.*;

public class SendServlet extends HttpServlet {

    private Context ctx;
    private MailListHome home;
    private PrintWriter out;
    private Session session;

    public SendServlet() throws NamingException
    {
        ///////// set this to your local SMTP server.  
        ///////// note: "localhost" won't work on OS X unless you've already configured sendmail

        String mailHost = "localhost";

        //Get system properties
        Properties props = System.getProperties();

        //Specify the SMTP server
        props.put("mail.smtp.host", mailHost);

        // create a new Session object
        this.session = Session.getInstance(props,null);
    }

    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setContentType("text/html");
        out = response.getWriter();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Send to Mailing List</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");

        // display the mail form

        out.println("<h1> Create Message </h1>");
        out.println("<form action=\"/MailList/Send\" method=\"POST\">");
        out.println("Mail From: <input type=\"text\" name=\"from\">");
        out.println("<br>Subject: <input type=\"text\" name=\"subject\">");
        out.println("<br>Message:<br><textarea name=\"message\" rows=\"10\" cols=\"40\"></textarea>");
        out.println("<br><input type=\"submit\" value=\"Send\">");
        out.println("</form>");
        out.println("</body></html");
    } 


    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
        throws IOException, ServletException
    {
        response.setContentType("text/html");
        out = response.getWriter();

        out.println("<html>");
        out.println("<head>");
        out.println("<title>Sending Message</title>");
        out.println("</head>");
        out.println("<body bgcolor=\"white\">");

        // send mail to all users

        String message = request.getParameter("message");
        String from = request.getParameter("from");
        String subject = request.getParameter("subject");
        int count = 0;
        try 
        {
            ctx = new InitialContext();
            home = (MailListHome) PortableRemoteObject.narrow(ctx.lookup("MailList"),
                                                                 MailListHome.class);
            Collection co = home.findAll();
            Iterator it = co.iterator();
            
            while (it.hasNext())
            {
                MailList ml = (MailList) it.next();
                if (sendMessage(message, subject, ml.getEmail(), from ))
                {
                    count++;
                }
            }
            out.println("Sent " + count + " messages.  Thank you.");
        }
        catch(Exception e)
        {
            out.println(e.toString());
        }

    }

    boolean sendMessage(String mess, String subject, String email, String from)
    {
        try 
        {
            // create a new MimeMessage object (using the Session created in the constructor)
            Message message = new MimeMessage(this.session);
            message.setFrom(new InternetAddress(from));
            message.setRecipients(Message.RecipientType.TO, new InternetAddress[] { new InternetAddress(email) });
            message.setSubject(subject);
            message.setContent(mess, "text/plain");
            
            Transport.send(message);
            return true;
        } 
        catch (Exception e) 
        { 
            out.println(e.toString()); 
            return false;
        }

    }
}