advertisement
javaboutique
Search Tips
Articles  |   Tutorials  |   Reviews  |   Tools  |   by Category  |   by Date  |   by Name  |   Submit  |   Source  |   Forums  |  
javaboutique
Browse DevX


Partners & Affiliates











advertisement

gb2



/* gb2.java

 *

 * Version 2.0

 * Copyright(C) 1996 by Bill Giel

 *

 * E-mail: rvdi@usa.nai.net

 * WWW: http://www.nai.net/~rvdi/home.htm

 *

 ***************************************************************************

 * Abstract

 * --------

 * A simple SMTP mail sender with a guest book interface.

 *

 * Version 2.0a adds preferredSize and minimumSize Methods to logoPanel class

 *

 ***************************************************************************

 * THE AUTHOR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY

 * OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED

 * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A

 * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. THE AUTHOR SHALL NOT BE LIABLE

 * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR

 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.

 ***************************************************************************/



/* Documentation addendum from Version 1

 *

 * NOTE: TO RECEIVE GUEST BOOK ENTRIES, YOU MUST SPECIFY YOUR E-MAIL

 *       ADDRESS AS THE 'RECEIVER' PARAMETER IN THE APPLETS HTML TAG.

 *

 *       YOUR LOCAL HOST MUST SUPPORT SMTP MESSAGES ON PORT 25

 *

 *

 * ADDENDUM TO DOCUMENTATION (7 Feb 1996) - Some of you have been

 * unable to get your guestbook applets to work on your own home

 * pages, while others have been successful.

 *

 * If you have a chance to study the code of the mailMessage method

 * of  the 'send' class, you'll see that guestbook first establishes

 * a socket with the 'mailhost' at port 25, in accordance with

 * TCP/SMTP specs (see RFC 821).

 *

 * Then, guestbook waits for the 220 'service ready' message transmission

 * over the socket. After successfully receiving 220, it then obtains the

 * 'helohost' domain name from the server and transmits the HELO <domain>

 * command over the socket. If accepted, the receiver-SMTP returns a 250

 * (OK) reply.

 *

 * Following that , guestbook sends MAIL FROM: <sender>, then  RECPT TO:

 * <receiver>, expecting 250 replies after each. Note that in guestbook,

 * the sender and receiver addresses are the same.

 *

 * It then sends the DATA command, and expects 354 intermediate reply from

 * the SMTP server. All that follows DATA is the standard text message in

 * the format defined in RFC 822, with a standard 'Subject:' field, followed

 * by a blank line. What follows the blank line is the actual text (your guest's

 * optional name, optional email address and comments or suggestions.)

 *

 * After the message is transmitted, guestbook transmits a single '\r\n . \r\n',

 * signifying end of message, waits for a 250 (OK) reply, then transmits a final

 * QUIT command, and anticipates receipt of 221, indicating the server is closing

 * the SMTP channel.

 *

 * The mailMessage method then closes the socket before returning true, only if

 * all of the above were successful. mailMessage returns false on any errors, or

 * if the receiver parameter is null.

 *

 * Guestbook should work just fine on your homepage, so long as your www host

 * supports the above SMTP protocol. You may otherwise have to experiment

 * to get guestbook to work with custom settings. That could actually be

 * fun... but since guestbook works as-is on my www server, I have no need

 * to mess with it :-(

 *

 * Please let me know if you manage to get guestbook working by revising it

 * for conditions other than those it is designed for.

 *

 * I hope this additional information is helpful.

 * ----------------------------------------------------------------------------

 * smtpSend class built up from code demonstated in sendmail.java

 * by Godmar Back, University of Utah, Computer Systems Lab, 1996

 * (a simple applet that sends you mail when your page is accessed)

 * ----------------------------------------------------------------------------

 */



import java.applet.*;

import java.awt.*;

import java.io.*;

import java.net.*;

import java.util.*;



class smtpSend

{

    static final short PORT = 25;



    String 		lastline;

    DataInputStream in;

    PrintStream p;



    String mailhost, receiver,  sender;

    TextArea scroller = null;

    Socket socket = null;



    smtpSend( String mailhost, String receiver)

    {

   		this.mailhost = mailhost;

   		this.receiver = receiver;

   		this.sender   = receiver;

    }



    public void setScroller(TextArea scroller)

    {

        this.scroller = scroller;

    }



	void expect(String expected, String errorMsg)

	    throws Exception

    {

		lastline = in.readLine();



        if (!lastline.startsWith(expected))

            throw new Exception("Error: " + errorMsg + " (Expected " + expected + ")");



		while (lastline.startsWith(expected + "-"))

		    lastline = in.readLine();

    }



    private void scrollOK()

    {

        scroller.appendText("OK");

    }





    private void openSocket()

        throws Exception

    {



        display("Connecting to " + mailhost + "...");



        try{

             socket = new Socket(mailhost, PORT);

        } catch (Exception e){

            throw new Exception("Socket Error: Can't connect!");

        }

        scrollOK();

    }



    private void openInputStream()

        throws Exception

    {

        display("Opening input stream" + "...");

        try{

            in = new DataInputStream(socket.getInputStream());

        }catch (Exception e){

            throw new Exception("Connection Error: Cannot open for input.");

        }

        scrollOK();

    }



    private PrintStream openOutputStream()

        throws Exception

    {



        display("Opening output stream" + "...");

        try{

            p = new PrintStream(socket.getOutputStream());

        }catch (Exception e){

            throw new Exception("Connection Error: Cannot open for output.");

        }

        scrollOK();

        return p;

    }



    private String getHeloHost()

        throws Exception

    {

        String helohost;



        display("Getting Local Host Name" + "...");

        try{

            helohost = InetAddress.getLocalHost().toString();

        }catch (Exception e){

            throw new Exception("Network Error: Unknown Local Host.");

        }

        scrollOK();

        display("Local Host: " + helohost + "\r\n");

        return helohost;

    }



    private void display(String string)

    {

        if (null != scroller)

            scroller.appendText("\r\n" + string);



        System.out.println(string);

    }



    private void sendData(String subject, String message)

        throws Exception

    {

        try{

	    	String helohost = getHeloHost();



	    	p.print("HELO " + helohost + "\r\n");

	    	expect("250", "HELO");



	   	    int pos;

	   	    String hello = "Hello ";

	   	    if ((pos = lastline.indexOf(hello)) != -1) {

	   		    helohost = lastline.substring(pos + hello.length());

	   		    helohost = helohost.substring(0, helohost.indexOf(' '));

		    }



		    p.print("MAIL FROM: " + sender + "\r\n");

		    expect("250", "MAIL FROM:");



	    	p.print("RCPT TO: " + receiver + "\r\n");

		    expect("250", "RCPT TO:");



		    p.print("DATA\r\n");

	    	expect("354", "DATA");



		    p.print("Subject: " + subject);

			p.print(" (" + helohost + ")");



	    	p.print("\r\n\r\n");



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

		    while (is.available() > 0) {

				String ln = is.readLine();

				if (ln.equals("."))

			    ln = "..";

		    	p.println(ln);

		    }



		    p.print(new Date().toGMTString());



            p.print("\r\n.\r\n");

            expect("250", "end of data");



	    	p.print("QUIT\r\n");

		    expect("221", "QUIT");



		}catch(Exception e){

		    throw e;

		}

	}



    public void mailMessage(String subject,String message)

        throws Exception

    {



	    if(null==receiver)throw new Exception("Parameter Error: No RECEIVER");



        try{

         	openSocket();

	    	openOutputStream();

	    	openInputStream();



	    	expect("220", "No greeting");



	    	display("Sending message via SMTP...");

	    	sendData(subject,message);



		} catch(Exception e){

		    throw e;

		}finally{

		    try {

	    		    if(socket != null)socket.close();

	    	} catch(Exception e){}

    	}



    	scrollOK();

    	display("Message Sent - Thank You!");

    	display("Press 'Quit' to close this window.");

    }



}



class logoPanel extends Canvas

{

    Image image   = null;

    boolean threeD;



    int iWidth, iHeight;



    logoPanel(Image image, boolean threeD)

    {

        this.image = image;

        this.threeD = threeD;

        if(null != image){

            iWidth=image.getWidth(this);

            iHeight=image.getHeight(this);

        }

        else{

            iWidth=400;

            iHeight=100;

        }



        if(threeD)

            resize(iWidth+4,iHeight+4);

        else

            resize(iWidth,iHeight);

    }



    public void paint(Graphics g)

    {

        int x,y;

        g.setColor(Color.lightGray);

        if(threeD){

            x=y=2;

            g.fill3DRect(0,0,size().width,size().height,false);

        }

        else{

            x=y=0;

            g.fillRect(0,0,size().width,size().height);

        }



        if(null != image)

            g.drawImage(image,x,y,this);

    }



    public Dimension minimumSize()

    {

        if(threeD)

            return(new Dimension(iWidth+4,iHeight+4));

        else

            return(new Dimension(iWidth,iHeight));

    }



    public Dimension preferredSize()

    {

        return this.minimumSize();

    }





}





class gbFrame extends tFrame

{

    static final String COPYRIGHT = "Guestbook II Copyright (C) 1996 by Bill Giel";



    TextField tf1,tf2;

    TextArea ta1, ta2;

    tButton sendButton;

    smtpSend smtp;



    gbFrame(String title, smtpSend smtp, Image image, boolean threeD)

    {



        super(title);



        this.smtp=smtp;



        setFont(new Font("System",Font.PLAIN,14));



        GridBagLayout gridbag=new GridBagLayout();

       	GridBagConstraints c=new GridBagConstraints();

       	setLayout(gridbag);



        if(null != image){

            c.insets=new Insets(5,5,8,5);

            c.weightx=1;c.weighty=1;

            c.fill=GridBagConstraints.NONE;

            c.gridwidth=GridBagConstraints.REMAINDER;

            logoPanel lp=new logoPanel(image, threeD);

       	    gridbag.setConstraints(lp,c);

       	    add(lp);



       	}



        c.weightx=1;c.weighty=1;

        c.insets=new Insets(3,5,0,0);

        c.gridwidth=1;

        c.fill=GridBagConstraints.NONE;

        c.anchor=GridBagConstraints.EAST;

        Label label = new Label(" Your Name (optional): ");

        gridbag.setConstraints(label,c);

       	add(label);



        c.insets=new Insets(3,0,0,5);

        c.fill=GridBagConstraints.NONE;

        c.anchor=GridBagConstraints.WEST;

        c.gridwidth=GridBagConstraints.REMAINDER;

        tf1=new TextField("",32);

       	gridbag.setConstraints(tf1,c);

       	add(tf1);



        c.insets=new Insets(3,5,0,0);

        c.gridwidth=1;

        c.fill=GridBagConstraints.NONE;

        c.anchor=GridBagConstraints.EAST;

        label = new Label(" Your Email (optional): ");

        gridbag.setConstraints(label,c);

       	add(label);



        c.insets=new Insets(3,0,0,5);

        c.gridwidth=GridBagConstraints.REMAINDER;

        c.fill=GridBagConstraints.NONE;

        c.anchor=GridBagConstraints.WEST;

        tf2=new TextField("",32);

       	gridbag.setConstraints(tf2,c);

       	add(tf2);







        c.insets=new Insets(8,5,0,5);

        c.gridwidth=GridBagConstraints.REMAINDER;

        c.fill=GridBagConstraints.NONE;

        c.anchor=GridBagConstraints.CENTER;

        label = new Label(" Any comments or suggestions are welcome! ");

        gridbag.setConstraints(label,c);

       	add(label);



       	c.insets=new Insets(3,5,3,5);

        c.gridwidth=GridBagConstraints.REMAINDER;;

        c.fill=GridBagConstraints.BOTH;

        ta1=new TextArea("",6,66);

       	gridbag.setConstraints(ta1,c);

       	add(ta1);



        c.insets=new Insets(3,5,3,0);

        c.gridwidth=2;

        c.fill=GridBagConstraints.HORIZONTAL;

        sendButton =new tButton("Send");

       	gridbag.setConstraints(sendButton,c);

       	add(sendButton);



        c.insets=new Insets(3,0,3,0);

        tButton b=new tButton("Clear");

       	gridbag.setConstraints(b,c);

       	add(b);



        c.insets=new Insets(3,0,3,5);

       	c.gridwidth=GridBagConstraints.REMAINDER;

        b=new tButton("Quit");

       	gridbag.setConstraints(b,c);

       	add(b);



      	c.insets=new Insets(3,5,3,5);

        c.gridwidth=GridBagConstraints.REMAINDER;;

        c.fill=GridBagConstraints.BOTH;

        ta2=new TextArea("Ready.",3,66);

       	gridbag.setConstraints(ta2,c);

       	add(ta2,false);

       	ta2.setEditable(false);



       	validate();



       	smtp.setScroller(ta2);



       	setBackground(Color.lightGray);



        System.out.println(COPYRIGHT);

    }



    private void clearText()

    {

        tf1.setText("");

        tf2.setText("");

        ta1.setText("");

        ta2.setText("Ready.");

    }









    public void show()

    {

        pack();

        //resize(preferredSize());

        sendButton.enable();

        clearText();

        Dimension screenSize = getToolkit().getScreenSize();

        move((screenSize.width - size().width)/2,

                       (screenSize.height - size().height)/2);

        super.show();

    }





    public boolean action(Event e, Object arg)

    {

        String NOT_SENT = "Message NOT sent.";

        String NO_DATA  = "Nothing to send.";



		if(arg.equals("Quit")){

			hide();

	  		return true;

        }

        else if(arg.equals("Clear")){

            clearText();

            return true;

        }

        else if (arg.equals("Send")){

            if(tf1.getText().length() + tf2.getText().length() + ta1.getText().length() == 0){

        	    ta2.appendText("\r\n" + NO_DATA);

        	    System.out.println(NO_DATA);

        	}

        	else{

        	    sendButton.disable();

	        	String message="Guest: " + tf1.getText() + "\n" +

        			           "Address: " + tf2.getText() + "\n\n" +

        	    		       ta1.getText() ;

                try{

        	        smtp.mailMessage("Guestbook Entry!",message);

                }catch (Exception exception){

                    String errMsg=exception.toString();

                    ta2.appendText("\r\n" + errMsg.substring(errMsg.indexOf(":")+2, errMsg.length()));

                    System.out.println(errMsg.substring(errMsg.indexOf(":")+2, errMsg.length()));

                    ta2.appendText("\r\n" + NOT_SENT);

                    System.out.println(NOT_SENT);

                    sendButton.enable();

                }

           	}

        }

        return false;

    }

}





public class gb2 extends Applet

{

    static final String COPYRIGHT  = "(C) 1996 by W.Giel";

    static final String IMAGE_LOAD = "Loading Images...wait.";

    static final String VERSION    = "Guest Book II v2.0a (4 July 1996)";

    static final String TITLE      = "Guest Book II";

	int width,height;



	tFrame window=null;



	smtpSend smtp = null;



	String szButton;

	String szReceiver;

	String szTitle;



	String szAppletImage;

	String szLogoImage;

	int imageCount = 0;

	imageLoader il=null;

	Image images[];

	boolean threeD;



	Color bgColor;

	Color fgColor;





	Button button;





	public void init()

	{

	    String szColor;



        szReceiver = getParameter("receiver");



		if(null==(szTitle=getParameter("title")))

			szTitle=TITLE;



		if(null==(szButton=getParameter("button")))

			szButton=TITLE;



		if(null==(szColor=getParameter("bgcolor")))

			bgColor=Color.lightGray;

	    else bgColor = parseColorString(szColor);





		if(null==(szColor=getParameter("fgcolor")))

			fgColor=Color.black;

	    else fgColor = parseColorString(szColor);



	    String param=getParameter("3d_logo");

	    if(null != param && Integer.valueOf(param).intValue() > 0)threeD=true;

	    else threeD=false;





	    add (button=new Button(szButton));

		width=size().width; height=size().height;

        button.move((width-button.size().width)/2,

						(width-button.size().width)/2);







		if(null != (szAppletImage = getParameter("applet_image")))imageCount++;

		if(null != (szLogoImage = getParameter("logo_image")))imageCount++;



		if(imageCount > 0){

		    int index=0;

    		String szImage[] = new String[imageCount];

    		if(null != szAppletImage)szImage[index++]=szAppletImage;

    		if(null != szLogoImage)szImage[index]=szLogoImage;

    		il=new imageLoader(this, szImage, imageCount, null);

    		il.start();

    		images=new Image[imageCount];

    	}







 	}





    private Color parseColorString(String colorString)

    {

        if(colorString.length()==6){

            int R = Integer.valueOf(colorString.substring(0,2),16).intValue();

            int G = Integer.valueOf(colorString.substring(2,4),16).intValue();

            int B = Integer.valueOf(colorString.substring(4,6),16).intValue();

            return new Color(R,G,B);

        }

        else return Color.lightGray;

    }





	public void paint(Graphics g)

	{

		Color color=g.getColor();



		FontMetrics fm=g.getFontMetrics();



	    if(il != null){

	        g.drawString(IMAGE_LOAD,(size().width-fm.stringWidth(IMAGE_LOAD))/2,size().height-fm.getMaxDescent()-3);

	        while(null == (images = il.retrieveImages()));

	        il.stop();

	        il=null;

	    }



	    g.setColor(bgColor);

		g.fill3DRect(0,0,size().width,size().height,true);

		g.setColor(fgColor);





	    if(null != szAppletImage && null != images)

			    g.drawImage(images[0], (size().width-images[0].getWidth(this))/2, button.size().height

				    +(size().height-images[0].getHeight(this)-button.size().height)/3,this);







        g.drawString(COPYRIGHT,(size().width-fm.stringWidth(COPYRIGHT))/2,size().height-fm.getMaxDescent()-3);

        g.setColor(color);





	}



    public boolean action(Event evt, Object arg)

    {

		if(arg.equals(szButton)){



		    if (null == smtp)

		        smtp=new smtpSend(getCodeBase().getHost(),szReceiver);

            if(null == window)

                window=new gbFrame(szTitle, smtp, (null != szLogoImage && null != images)? images[imageCount-1] : null, threeD);

            window.show();

			return true;

        }

		else return false;

    }





	///////////////////////////////////////////////////

	//Applet parameters - pretty much self-explanatory

	///////////////////////////////////////////////////

    public String[][] getParameterInfo()

    {

		String[][] info = {

            {"width","int","width of the applet, in pixels"},

            {"height","int","height of the applet, in pixels"},

            {"receiver","string","SMTP 'RCPT TO:' parameter <null>"},

            {"applet_image","string","GIF file to display on applet panel <null>"},

            {"logo_image","string","GIF file to display on message dialog <null>"},

            {"3d_logo","int","Non-zero produces an inletted logo image <0>"},

            {"bgcolor","String","RGB hex triplet for applet panel background <lightGray>"},

            {"fgcolor","String","RGB hex triplet for applet panel foreground <black>"},

            {"title","string","title for popup window <Guest Book II>"},

            {"button","string","Label to appear in applet's button <Guest Book II>"}

        };

        return info;

    }



	/////////////////////////////////////

    //Applet name, author and info lines

    /////////////////////////////////////

    public String getAppletInfo()

    {

        return (	VERSION + " - simulates a guest log\n" +

        			"by E-mailing guest data to page owner, by Bill Giel\n" +

        			"http://www.nai.net/~rvdi/home.htm  or  rvdi@usa.nai.net\n" +

        			"Copyright 1996 by William Giel.");

    }





}






Back to the gb2 applet page.

How to Add Java Applets to Your Site

New on the Java Boutique:

New Review:

Time Management Made Easy with the Quartz Enterprise Job Scheduler
Why not just use the Java timer API? This open source scheduling API boasts simplicity, ease-of-integration, a well-rounded feature set, and it's free!

New Applet:

Reverse Complement
Reverse Complement is a simple applet that converts DNA or RNA sequences into three useful formats.

Elsewhere on internet.com:

WebDeveloper Java
Lots of Java information on webdeveloper.com

WDVL Java
Thorough Java resource at the Web Developer's Virtual Library.

ScriptSearch Java
Hundreds of free Java code files to download.

jGuru: Your View of the Java Universe
Customizable portal with online training, FAQs, regular news updates, and tutorials.

 Microsoft Visual Studio 2010 Showcase
 Avaya Developer Showcase
 MSDN Spotlight
 PHP for Windows Showcase
XML error: undefined entity at line 39
advertisement
Receive Articles via our XML/RSS feed
Receive Articles via our XML/RSS feed

JavaBytes
Internet Cyclone
This powerful, easy-to-use, internet optimizer is for Windows 95, 98, ME, NT, 2000 and XP. It's designed to automatically optimize your Windows settings, boosting your Internet connection up to 200%.

Windows 7: From Beta to Final Code in One Year
Google Shows Off Chrome OS, Releases Source
Microsoft Shows Off Silverlight 4, IE9 Plans
Metasploit Expands Vulnerability Test Framework
HyperCard Reborn?
Fedora 12 Takes Aim at Linux Networking
Top Supercomputer Nearly Doubles in Speed
Fedora 12 Linux Tackles Virtualization
Apple Gives iPhone Developers App Status Tracker
Novell Sets OpenSUSE 11.2 Free

Creating Custom Export Filters for StarOffice with XSLT
WPF Wonders: Using DataTemplates
Crystal Reports Family Offers Options for Developers
Avaya Aura Session Manager video
Avaya Aura Overview video
Exploring HTML 5's Audio/Video Multimedia Support
Overriding Virtual Functions? Use C++0x Attributes to Avoid Bugs.
Understanding the Cloud Computing Security Vulnerabilities
Cisco and IBM Target a Greener World
Upgrade to Visual Studio 2010 with the Ultimate Offer

Advertising Info  |   Member Services  |   Contact Us  |   Help  |   Feedback  |   Site Map  |   Network Map  |   About

internet.commediabistro.comJusttechjobs.comGraphics.com

Search:

WebMediaBrands Corporate Info

Legal Notices, Licensing, Permissions, Privacy Policy.
Advertise | Newsletters | Shopping | E-mail Offers | Freelance Jobs