Einfacher E-Mail-Versand mit SMTP in Java

+ andere TechDocs
+ Netzwerkfunktionen
+




Inhalt

  1. Vollständige E-Mail-Implementierung
  2. E-Mail-Versand aus dem Kommandozeilenfenster
  3. E-Mail-Versand von Applet aus
  4. E-Mail-Versand per JSP Apache Jakarta Taglibs
  5. Programmierbeispiel: Einfachster E-Mail-Versand


Vollständige E-Mail-Implementierung

Eine vollständige Java-E-Mail-Implementierung bietet JavaMail:



E-Mail-Versand aus dem Kommandozeilenfenster

Beispiele für im Kommandozeilenfenster ausführbare Programme zum Versand von E-Mails:



E-Mail-Versand von Applet aus

Unsignierte Applets können nicht ohne weiteres fremde Server ansprechen. Deshalb:



E-Mail-Versand per JSP Apache Jakarta Taglibs

Ein einfaches Programmierbeispiel zum E-Mail-Versand per JSP Apache Jakarta Taglibs finden Sie unter:



Programmierbeispiel: Einfachster E-Mail-Versand

/**
SmtpSimple ist nur für einfachsten E-Mail-Versand geeignet, ohne Anhang und ohne MIME-Konvertierung.
SmtpSimple funktioniert z.B. mit GMX (mail.gmx.net), Strato (post.strato.de) und T-Online (mailto.btx.dtag.de). Allerdings müssen eventuell Autorisierungsprozeduren vorgeschaltet werden (z.B. funktioniert T-Online-E-Mail nur mit T-Online-Internet-Zugang sowie GMX und Strato nur nach vorherigem POP3-Lesezugriff).
Es kann entweder die Funktion SmtpSimple.sendEmail() in Java-Programme eingebunden werden, oder SmtpSimple als eigenständiges Kommandozeilenprogramm per java SmtpSimple eingesetzt werden.
Die Funktion SmtpSimple.sendEmail() macht keine Ausgaben (etwa per System.out.println()) und kann sowohl in Applets als auch in Applikationen verwendet werden. Der SMTP-Dialog wird returniert und kann angezeigt werden, was aber normalerweise nicht sinnvoll ist. Fehler werden durch Exceptions angezeigt.
Das Kommandozeilenprogramm (java SmtpSimple) listet beim Aufruf ohne Kommandozeilenparameter die notwendigen Parameter und ein Aufrufbeispiel auf. Beim Aufruf mit Parametern wird der SMTP-Dialog angezeigt. Im Fehlerfall endet das Programm mit gesetztem Errorlevel.
*/
import java.net.*;
import java.io.*;

public class SmtpSimple
{
  private DataOutputStream os  = null;
  private BufferedReader   is  = null;
  private String           sRt = "";

  public static void main( String[] args )
  {
    System.out.println(
      "\nSmtpSimple.java. Send simple email.\nUsage:\n" +
      "  java SmtpSimple SmtpServer FromAdr FromRealName ToAdr ToRealName Subject Text\n" +
      "Example:\n" +
      "  java SmtpSimple mail.gmx.net MeinName@MeinProvider.de \"Torsten Horn\" x@y.z xyz S T\n" );
    if( null == args || 6 > args.length )
    {
      System.out.println( "Error: parameters missing!" );
      System.exit( 1 );
    }
    try
    {
      SmtpSimple smtp = new SmtpSimple();
      System.out.println( smtp.sendEmail( args[0], args[1], args[2], args[3], args[4], args[5],
                                          ( 6 < args.length ) ? args[6] : null ) );
    }
    catch( Exception ex )
    {
      System.out.println( "Error:\n" + ex );
      System.exit( 2 );
    }
    System.exit( 0 );
  }

  public synchronized final String sendEmail( String sSmtpServer,
                                              String sFromAdr, String sFromRealName,
                                              String sToAdr,   String sToRealName,
                                              String sSubject, String sText )
  throws IOException, Exception
  {
    Socket so = null;
    try {
      sRt = "";
      if( null == sSmtpServer  || 0 >= sSmtpServer.length() ||
          null == sFromAdr     || 0 >= sFromAdr.length()    ||
          null == sToAdr       || 0 >= sToAdr.length()      ||
          (  (null == sSubject || 0 >= sSubject.length())
          && (null == sText    || 0 >= sText.length())  )   )
        throw new Exception( "Invalid Parameters for SmtpSimple.sendEmail()." );
      if( null == sFromRealName || 0 >= sFromRealName.length() )  sFromRealName = sFromAdr;
      if( null == sToRealName   || 0 >= sToRealName.length() )    sToRealName   = sToAdr;
      so = new Socket( sSmtpServer, 25 );
      os = new DataOutputStream( so.getOutputStream() );
      is = new BufferedReader(
           new InputStreamReader( so.getInputStream() ) );
      so.setSoTimeout( 10000 );
      writeRead( true, "220", null );
      writeRead( true, "250", "HELO " + sSmtpServer + "\n" );
      writeRead( true, "250", "RSET\n" );
      writeRead( true, "250", "MAIL FROM:<" + sFromAdr + ">\n" );
      writeRead( true, "250", "RCPT TO:<" + sToAdr + ">\n" );
      writeRead( true, "354", "DATA\n" );
      writeRead( false, null, "To: " + sToRealName + " <" + sToAdr + ">\n" );
      writeRead( false, null, "From: " + sFromRealName + " <" + sFromAdr + ">\n" );
      writeRead( false, null, "Subject: " + sSubject + "\n" );
      writeRead( false, null, "Mime-Version: 1.0\n" );
      writeRead( false, null, "Content-Type: text/plain; charset=\"iso-8859-1\"\n" );
      writeRead( false, null, "Content-Transfer-Encoding: quoted-printable\n\n" );
      writeRead( false, null, sText + "\n" );
      writeRead( true, "250", ".\n" );
      writeRead( true, "221", "QUIT\n" );
      return sRt;
    } finally {
      if( is != null ) try { is.close(); } catch (Exception ex) {}
      if( os != null ) try { os.close(); } catch (Exception ex) {}
      if( so != null ) try { so.close(); } catch (Exception ex) {}
      is = null;
      os = null;
    }
  }

  private final void writeRead( boolean bReadAnswer,
                                String  sAnswerMustStartWith,
                                String  sWrite )
  throws IOException, Exception
  {
    if( null != sWrite && 0 < sWrite.length() )
    {
      sRt += sWrite;
      os.writeBytes( sWrite );
    }
    if( bReadAnswer )
    {
      String sRd = is.readLine() + "\n";
      sRt += sRd;
      if( null != sAnswerMustStartWith
          && 0 < sAnswerMustStartWith.length()
          && !sRd.startsWith( sAnswerMustStartWith ) )
        throw new Exception( sRt );
    }
  }
}




Weitere Themen: andere TechDocs | JSP | Netzwerkfunktionen | Webanwendungen
© 1998-2007 Torsten Horn, Aachen