import sun.net.smtp.*;
import java.applet.*;
import java.awt.*;
import java.io.*;


public class MailClient extends Applet {

  TextField sender;
  TextField addressee;
  TextField subject;
  TextArea message;
  Button send;

  public void init() {
  
     sender = new TextField(40);
     addressee = new TextField(40);
     subject = new TextField(40);
     message = new TextArea(70, 40);
     send = new Button("Send Message");
     setLayout(new BorderLayout());
     
     Panel n1 = new Panel();
     n1.setLayout(new FlowLayout(FlowLayout.LEFT));
     n1.add(new Label("To:     "));
     n1.add(addressee);
     Panel n2 = new Panel();
     n2.setLayout(new FlowLayout(FlowLayout.LEFT));
     n2.add(new Label("From:   "));
     n2.add(sender);
     Panel n3 = new Panel();
     n3.setLayout(new FlowLayout(FlowLayout.LEFT));
     n3.add(new Label("Server: "));
     n3.add(subject);
     Panel headers = new Panel();
     headers.setLayout(new GridLayout(3, 1));
     headers.add(n1);
     headers.add(n2);
     headers.add(n3);
     add("North", headers);
     add("Center", message);
     Panel s1 = new Panel();
     s1.setLayout(new FlowLayout());
     s1.add(send);
     add("South", s1);
     
  } 
  
  public boolean action(Event e, Object what) {
  
    if (e.target == send) {
      sendMail();
      return true;
    }
    return false;
  }

  protected void sendMail() {
  
    try {
    
      // from and to
      SmtpClient sc = new SmtpClient(getCodeBase().getHost());
      sc.from(sender.getText());
      sc.to(addressee.getText());
      PrintStream ps = sc.startMessage();
      
      // additional headers, subject et al.
      ps.println("Subject: " + subject.getText());
      
      // blank line separates the headers and message
      ps.println(); 
      ps.println(message.getText()); 
      sc.closeServer();
      
      // clear the fields in preparation for the next message
      addressee.setText("");
      subject.setText("");
      message.setText("");
    }
    catch (IOException e) {
      // Should really put up a dialog box informing user of the error
      System.err.println(e);
    }
  
  }

}