This program shows how to use sockets to send plain text mail messages. : Socket « Network Protocol « Java






This program shows how to use sockets to send plain text mail messages.

 
/*
   This program is a part of the companion code for Core Java 8th ed.
   (http://horstmann.com/corejava)

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

import java.awt.EventQueue;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingWorker;

/**
 * This program shows how to use sockets to send plain text mail messages.
 * @author Cay Horstmann
 * @version 1.11 2007-06-25
 */
public class MailTest
{
   public static void main(String[] args)
   {
      EventQueue.invokeLater(new Runnable()
         {
            public void run()
            {
               JFrame frame = new MailTestFrame();
               frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
               frame.setVisible(true);
            }
         });
   }
}

/**
 * The frame for the mail GUI.
 */
class MailTestFrame extends JFrame
{
   public MailTestFrame()
   {
      setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
      setTitle("MailTest");

      setLayout(new GridBagLayout());

      // we use the GBC convenience class of Core Java Volume 1 Chapter 9
      add(new JLabel("From:"), new GBC(0, 0).setFill(GBC.HORIZONTAL));

      from = new JTextField(20);
      add(from, new GBC(1, 0).setFill(GBC.HORIZONTAL).setWeight(100, 0));

      add(new JLabel("To:"), new GBC(0, 1).setFill(GBC.HORIZONTAL));

      to = new JTextField(20);
      add(to, new GBC(1, 1).setFill(GBC.HORIZONTAL).setWeight(100, 0));

      add(new JLabel("SMTP server:"), new GBC(0, 2).setFill(GBC.HORIZONTAL));

      smtpServer = new JTextField(20);
      add(smtpServer, new GBC(1, 2).setFill(GBC.HORIZONTAL).setWeight(100, 0));

      message = new JTextArea();
      add(new JScrollPane(message), new GBC(0, 3, 2, 1).setFill(GBC.BOTH).setWeight(100, 100));

      comm = new JTextArea();
      add(new JScrollPane(comm), new GBC(0, 4, 2, 1).setFill(GBC.BOTH).setWeight(100, 100));

      JPanel buttonPanel = new JPanel();
      add(buttonPanel, new GBC(0, 5, 2, 1));

      JButton sendButton = new JButton("Send");
      buttonPanel.add(sendButton);
      sendButton.addActionListener(new ActionListener()
         {
            public void actionPerformed(ActionEvent event)
            {
               new SwingWorker<Void, Void>()
               {
                  protected Void doInBackground() throws Exception
                  {
                     comm.setText("");
                     sendMail();
                     return null;
                  }
               }.execute();
            }
         });
   }

   /**
    * Sends the mail message that has been authored in the GUI.
    */
   public void sendMail()
   {
      try
      {
         Socket s = new Socket(smtpServer.getText(), 25);

         InputStream inStream = s.getInputStream();
         OutputStream outStream = s.getOutputStream();

         in = new Scanner(inStream);
         out = new PrintWriter(outStream, true /* autoFlush */);

         String hostName = InetAddress.getLocalHost().getHostName();

         receive();
         send("HELO " + hostName);
         receive();
         send("MAIL FROM: <" + from.getText() + ">");
         receive();
         send("RCPT TO: <" + to.getText() + ">");
         receive();
         send("DATA");
         receive();
         send(message.getText());
         send(".");
         receive();
         s.close();
      }
      catch (IOException e)
      {
         comm.append("Error: " + e);
      }
   }

   /**
    * Sends a string to the socket and echoes it in the comm text area.
    * @param s the string to send.
    */
   public void send(String s) throws IOException
   {
      comm.append(s);
      comm.append("\n");
      out.print(s.replaceAll("\n", "\r\n"));
      out.print("\r\n");
      out.flush();
   }

   /**
    * Receives a string from the socket and displays it in the comm text area.
    */
   public void receive() throws IOException
   {
      String line = in.nextLine();
      comm.append(line);
      comm.append("\n");
   }

   private Scanner in;
   private PrintWriter out;
   private JTextField from;
   private JTextField to;
   private JTextField smtpServer;
   private JTextArea message;
   private JTextArea comm;

   public static final int DEFAULT_WIDTH = 300;
   public static final int DEFAULT_HEIGHT = 300;
}

/*
This program is a part of the companion code for Core Java 8th ed.
(http://horstmann.com/corejava)

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

/*
GBC - A convenience class to tame the GridBagLayout

Copyright (C) 2002 Cay S. Horstmann (http://horstmann.com)

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/


/**
This class simplifies the use of the GridBagConstraints
class.
*/
class GBC extends GridBagConstraints 
{
/**
   Constructs a GBC with a given gridx and gridy position and
   all other grid bag constraint values set to the default.
   @param gridx the gridx position
   @param gridy the gridy position
*/
public GBC(int gridx, int gridy)
{
   this.gridx = gridx;
   this.gridy = gridy;
}

/**
   Constructs a GBC with given gridx, gridy, gridwidth, gridheight
   and all other grid bag constraint values set to the default.
   @param gridx the gridx position
   @param gridy the gridy position
   @param gridwidth the cell span in x-direction
   @param gridheight the cell span in y-direction
*/
public GBC(int gridx, int gridy, int gridwidth, int gridheight)
{
   this.gridx = gridx;
   this.gridy = gridy;
   this.gridwidth = gridwidth; 
   this.gridheight = gridheight; 
}

/**
   Sets the anchor.
   @param anchor the anchor value
   @return this object for further modification
*/
public GBC setAnchor(int anchor) 
{ 
   this.anchor = anchor; 
   return this;
}

/**
   Sets the fill direction.
   @param fill the fill direction
   @return this object for further modification
*/
public GBC setFill(int fill) 
{ 
   this.fill = fill; 
   return this;
}

/**
   Sets the cell weights.
   @param weightx the cell weight in x-direction
   @param weighty the cell weight in y-direction
   @return this object for further modification
*/
public GBC setWeight(double weightx, double weighty) 
{ 
   this.weightx = weightx; 
   this.weighty = weighty; 
   return this;
}

/**
   Sets the insets of this cell.
   @param distance the spacing to use in all directions
   @return this object for further modification
*/
public GBC setInsets(int distance) 
{ 
   this.insets = new Insets(distance, distance, distance, distance);
   return this;
}

/**
   Sets the insets of this cell.
   @param top the spacing to use on top
   @param left the spacing to use to the left
   @param bottom the spacing to use on the bottom
   @param right the spacing to use to the right
   @return this object for further modification
*/
public GBC setInsets(int top, int left, int bottom, int right) 
{ 
   this.insets = new Insets(top, left, bottom, right);
   return this;
}

/**
   Sets the internal padding
   @param ipadx the internal padding in x-direction
   @param ipady the internal padding in y-direction
   @return this object for further modification
*/
public GBC setIpad(int ipadx, int ipady) 
{ 
   this.ipadx = ipadx; 
   this.ipady = ipady; 
   return this;
}
}

   
  








Related examples in the same category

1.Create a socket without a timeout
2.Create a socket with a timeout
3.Demonstrate Sockets.
4.Socket connection and concurrent package
5.XML based message
6.ObjectInputStream and ObjectOutputStream from Socket
7.ServerSocket and Socket for Serializable object
8.String based communication between Socket
9.Get email with Socket
10.Create PrintWriter from BufferedWriter, OutputStreamWriter and Socket
11.Read from server
12.Use Socket to read and write stream
13.Connects to a server at a specified host and port. It reads text from the console and sends it to the server
14.A simple network client that establishes a network connection to a specified port on a specified host, send an optional message across the connection
15.Reading Text from a Socket
16.Writing Text to a Socket
17.Sending a POST Request Using a Socket
18.Get the Date from server
19.Transfer a file via Socket
20.Ping a server
21.Read and write through socket
22.Read float number from a Socket
23.Read Object from Socket
24.deleting messages from a POP3 mailbox based on message size and Subject line
25.A timeout feature on socket connections
26.Write Objects From Socket
27.Write Double Using Sockets
28.Download WWW Page
29.Redirects incoming TCP connections to other hosts/ports
30.Socket Fetcher
31.Socket Address Encoder
32.Zip socket
33.This program shows how to interrupt a socket channel.
34.Makes a socket connection to the atomic clock in Boulder, Colorado, and prints the time that the server sends.