SendMail PostableResource

I have developed a simple PostableResource that send an e-mail
from a form.

I want return a file (specified in ATTR_REPLYFILE) for the response.

What is the best way ???

Pasquale

Following the code (excuse me for mix of Italian and English Language)
---------------------------------------------------------------------------

package pdf.jigsaw.postable;

import w3c.jigsaw.forms.*;
import w3c.jigsaw.html.*;
import w3c.jigsaw.http.*;
import w3c.mime.* ;
import w3c.jigsaw.resources.*;

import java.io.* ;
import java.net.* ;
import java.util.*;


class MailException extends Exception
{
    public final static int NO_SENDER     = 1;
    public final static int NO_FROM       = 2;
    public final static int NO_TO         = 3;
    public final static int NO_MESSAGE    = 4;
    public final static int NO_CONNECTION = 5;

    public int    m_nType;

    public MailException(int nType, String strMessage)
    {
        super(strMessage);
        m_nType = nType;
    }

}

class MailMessage
{
    protected String m_strSMTP;
    protected String m_strSender;
    protected String m_strFrom;
    protected String m_strRealName;
    protected String m_strTo;
    protected String m_strSubject;
    protected String m_strReplyTo;
    protected String m_strMessage;

    protected String m_strLastline;

    protected InetAddress m_iaHost;

    protected final static int PORT = 25;

    public MailMessage(String strSMTP, String strFrom, String strRealName,
                       String strTo, String strSubject , String strMessage)
throws MailException
    {
        m_strSMTP     = strSMTP;
        m_strSender   = strFrom;
        m_strFrom     = strFrom;
        m_strRealName = strRealName;
        m_strTo       = strTo;
        m_strReplyTo  = strFrom;
        m_strSubject  = strSubject;
        m_strMessage  = strMessage;
    }

    public MailMessage(SendMail sendMail, URLDecoder data, InetAddress
iaHost) throws MailException
    {
        String strTmp;

        ////////////////////////////////////////////////////////////////////
////////////
        // retrieve the smtp receive server
        if ( (strTmp = data.getValue(SendMail.SMTP)) != null)
            m_strSMTP = strTmp;
        else if ( (strTmp = sendMail.getString(SendMail.ATTR_SMTP, null)) !=
null)
            m_strSMTP = strTmp;
        else
            m_strSMTP = "127.0.0.1"; // default localhost (http server relative)

        ////////////////////////////////////////////////////////////////////
////////////
        // retrieve the sender
        if ( (strTmp = data.getValue(SendMail.SENDER)) != null)
            m_strFrom = strTmp;
        else if ( (strTmp = sendMail.getString(SendMail.ATTR_SENDER, null))
!= null)
            m_strFrom = strTmp;
        else
            m_strFrom = "webmaster";

        ////////////////////////////////////////////////////////////////////
////////////
        // retrieve From
        if ( (strTmp = data.getValue(SendMail.FROM)) != null)
            m_strFrom = strTmp;
        else
            throw new MailException(MailException.NO_FROM, "No From variable
found");

        ////////////////////////////////////////////////////////////////////
////////////
        // retrieve RealName
        if ( (strTmp = data.getValue(SendMail.REALNAME)) != null)
            m_strRealName = strTmp;
        else
            m_strRealName = "";

        ////////////////////////////////////////////////////////////////////
////////////
        // retrieve To
        if ( (strTmp = data.getValue(SendMail.TO)) != null)
            m_strTo = strTmp;
        else if ( (strTmp = sendMail.getString(SendMail.ATTR_TO, null)) != null)
            m_strTo = strTmp;
        else
            throw new MailException(MailException.NO_TO, "No To variable
found");

        ////////////////////////////////////////////////////////////////////
////////////
        // retrieve Subject
        if ( (strTmp = data.getValue(SendMail.SUBJECT)) != null)
            m_strSubject = strTmp;
        else
            m_strSubject = "";

        if (sendMail.getBoolean(SendMail.ATTR_APPENDSUB, false) == true)
            m_strSubject = sendMail.getString(SendMail.ATTR_SUBJECT, "") +
m_strSubject;

        ////////////////////////////////////////////////////////////////////
////////////
        // retrieve Message
        if ( (strTmp = data.getValue(SendMail.MESSAGE)) != null)
            m_strMessage = strTmp;
        else
            throw new MailException(MailException.NO_MESSAGE, "No Message");

        m_iaHost = iaHost;

    }

    void expect(String expected, String msg, DataInputStream in) throws
Exception
    {
	    m_strLastline = in.readLine();

        if (!m_strLastline.startsWith(expected))
        {
            // System.out.println(msg + ":" + lastline);
    	    throw new Exception(msg + ":" + m_strLastline);
    	}

	    while (m_strLastline.startsWith(expected + "-"))
	        m_strLastline = in.readLine();
    }


    public boolean send() throws MailException
    {
        String  helohost;

	    Socket s = null;
	    DataInputStream in;

        try
        {
    	    String res;
	        s = new Socket(m_strSMTP, PORT);

	        PrintStream p = new PrintStream(s.getOutputStream());
	        in = new DataInputStream(s.getInputStream());

	        expect("220", "no greeting", in);

	        helohost = m_iaHost.getHostName();
	        p.print("HELO " + helohost + "\r\n");
	        expect("250", "helo", in);

            int pos;
            String hello = "Hello ";

            if ((pos = m_strLastline.indexOf(hello)) != -1) {
                helohost = m_strLastline.substring(pos + hello.length());
                helohost = helohost.substring(0, helohost.indexOf(' '));
            }

    	    p.print("MAIL FROM: " + m_strSender + "\r\n");
    	    expect("250", "mail from", in);

    	    p.print("RCPT TO: " + m_strTo + "\r\n");
    	    expect("250", "rcpt to", in);

    	    p.print("DATA\r\n");
    	    expect("354", "data", in);

            if (!m_strRealName.equals(""))
        	    p.print("From: " + m_strRealName + " <" + m_strFrom + ">\r\n");
            else
        	    p.print("From: " + m_strFrom + "\r\n");

    	    p.print("To: " + m_strTo + "\r\n");
    	    p.print("Subject: " + m_strSubject + " (" + helohost + ")\r\n" );

            // end of headers
    	    p.print("\r\n");

    	    DataInputStream is = new DataInputStream(new
StringBufferInputStream(m_strMessage));

    	    while (is.available() > 0)
    	    {
        		String ln = is.readLine();
        		// System.out.println("Linea messaggio: " + ln);
        		if (ln.equals("."))
        		    ln = "..";
    		    p.print(ln + "\r\n");
    	    }

    	    p.print("\r\n.\r\n");
    	    expect("250", "end of data", in);

    	    p.print("QUIT\r\n");
    	    expect("221", "quit", in);
    	}
    	catch(Exception e)
    	{
    	    return false;
    	}
    	finally
    	{
    	    try
    	    {
    		    if (s != null)
    		    s.close();
    	    }
    	    catch(Exception e)
    	    {
    		}
    	}

        return true;

    }

}


public class SendMail extends PostableResource
{

    protected static int ATTR_SMTP      = -1 ; // smtp server
    protected static int ATTR_SENDER    = -1 ; // sender (smtp user)
    protected static int ATTR_TO        = -1 ; // mail to
    protected static int ATTR_SUBJECT   = -1 ; // mail to
    protected static int ATTR_APPENDSUB = -1 ; // Append the subject from
the form
    protected static int ATTR_REPLYFILE = -1 ; // replyfile

    // protected static int ATTR_CONTENT_TYPE = -1;

    protected final static String SMTP      = "smtpServer";
    protected final static String SENDER    = "sender";
    protected final static String FROM      = "from";
    protected final static String REALNAME  = "realname";
    protected final static String TO        = "to";
    protected final static String SUBJECT   = "subject";
    protected final static String REPLYTO   = "replyto";
    protected final static String MESSAGE   = "message";
    protected final static String APPENDSUB = "appendSubject";
    protected final static String REPLYFILE = "replyFile";

    static {
        Attribute a   = null ;
        Class     cls = null ;

        try
        {
            cls = Class.forName("pdf.jigsaw.postable.SendMail") ;
        } catch (Exception ex) {
            ex.printStackTrace() ;
            System.exit(1) ;
        }

        a = new StringAttribute(SMTP , "", Attribute.EDITABLE) ;
        ATTR_SMTP = AttributeRegistery.registerAttribute(cls, a) ;

        a = new StringAttribute(SENDER, "", Attribute.EDITABLE) ;
        ATTR_SENDER = AttributeRegistery.registerAttribute(cls, a) ;

        a = new StringAttribute(TO, "", Attribute.EDITABLE) ;
        ATTR_TO = AttributeRegistery.registerAttribute(cls, a) ;

        a = new StringAttribute(SUBJECT, "", Attribute.EDITABLE) ;
        ATTR_SUBJECT = AttributeRegistery.registerAttribute(cls, a) ;

        a = new BooleanAttribute(APPENDSUB, new Boolean(false),
Attribute.EDITABLE);
        ATTR_APPENDSUB = AttributeRegistery.registerAttribute(cls, a) ;

        a = new StringAttribute(REPLYFILE, "", Attribute.EDITABLE) ;
        ATTR_REPLYFILE = AttributeRegistery.registerAttribute(cls, a) ;

    }


    public Reply handle(Request request, URLDecoder data) throws HTTPException
    {

        MailMessage msg;

        try
        {
            msg = new MailMessage(this, data,
request.getClient().getInetAddress());
            if (!msg.send())
            {
                Reply error = request.makeReply(HTTP.NOT_FOUND) ;
                error.setContent ("<h1>Messaggio non inviato</h1>");
                return error;
            }
        }
        catch (MailException e)
        {
            Reply error = request.makeReply(HTTP.NOT_FOUND) ;
            error.setContent ("<h1>Messaggio non inviato</h1><h2>" +
e.getMessage() +"</h2>");
            return error;
        }

        String referer = request.getField("referer");

        Reply reply = request.makeReply(HTTP.OK) ;
        reply.setContent ("<h1>Messagge OK</h1>" +
                          "<h2>Return to <a href=" + referer + ">" +
                          referer + "</a></h2>");

        return reply;

        // return replyFile(request, data);

    }

}

-----------------------------------------------------------------
 Pasquale Di Feo                        e-mail: pasdif@netfly.it
 NetFLY by Area Informatica s.a.s.      http://www.netfly.it

 Via Guido Cucci, 32                        tel. +39  81 5172811
 84014 Nocera Inferiore (SA)                     +39  81 5171188
 ITALY                                      fax  +39  81 928273
                                            cel. +39 347 3328693
-----------------------------------------------------------------

Received on Friday, 26 July 1996 13:10:50 UTC