package basics.internet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import basics.testing.Test;
import basics.unexpected.Problem;

public class Email
{
private String smtpServer  = "";
private String mailFrom    = "";
private String mailTo      = "";
private String mailSubject = "";
private String mailText    = "";

public Email(String smtpServer, String mailFrom)
{
   this.smtpServer = smtpServer;
   this.mailFrom = mailFrom;
}

public void setMailTo(String mailTo)
{
   this.mailTo = mailTo;
}

public void setMailSubject(String mailSubject)
{
   this.mailSubject = mailSubject;
}

public void setMailText(String mailText)
{
   this.mailText = mailText;
}

public void send() throws Problem
{
   Socket mailServer = null;
   BufferedReader in = null;
   PrintWriter out = null;
   // logger.debug("SMTP : " + smtpServer);
   // logger.debug("Mail to: " + mailTo);
   try
   {
      // logger.info ("Sende Mail an " + mailTo + " Server: " + smtpServer);
      mailServer = new Socket(smtpServer, 25);
      in = new BufferedReader(new InputStreamReader(mailServer.getInputStream()));
      out = new PrintWriter(mailServer.getOutputStream(), true);
      out.println("HELO " + smtpServer);
      // logger.debug("Host -> " + in.readLine());
      out.println("MAIL FROM: " + mailFrom);
      // logger.debug("Host -> " + in.readLine());
      out.println("RCPT TO: " + mailTo);
      // logger.debug("Host -> " + in.readLine());
      out.println("DATA");
      // logger.debug("Host -> " + in.readLine());
      // mailText = "["+ mailText+"]";
      out.println("SUBJECT: " + mailSubject);
      out.println("\r\n");
      out.println(mailText);
      out.println("\r\n.\r\n");
      // logger.debug("Host -> " + in.readLine());
      out.println("QUIT");
   }
   catch(IOException e)
   {
      String err = "Sending mail [" + toString() + "] over " + smtpServer + " failed.";
      throw new Problem(err);
   }
   finally
   {
      try
      {
         out.flush();
      }
      catch(Exception e)
      {
      }
      try
      {
         out.close();
      }
      catch(Exception e)
      {
      }
      try
      {
         in.close();
      }
      catch(Exception e)
      {
      }
      try
      {
         mailServer.close();
      }
      catch(Exception e)
      {
      }
   }
}

public static void main(String [] args) throws Exception
{
   Email e = new Email(args[0], args[1]);
   e.setMailTo(args[2]);
   e.setMailSubject(args[3]);
   e.setMailText(args[4]);
   e.send();
}

public String toString()
{
   return mailTo + " [von " + mailFrom + "] " + mailSubject + " {" + mailText + "}";
}
}
