# java.lang.NoClassDefFoundError: javax/mail/Authenticator



## Zanderfilet (2. Juli 2008)

Hallo,

hab obiges Problem, arbeite mit eclipse, die mail.jar sowie activator.jar (zur sicherheit) pfade sind angegeben.

Code:


```
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import javax.mail.Authenticator;
import java.io.*;

public class MailCommunicator
{

  public void postMail( String recipients[ ], String subject,
                            String message , String from) throws MessagingException
  {
    boolean debug = false;

     //Set the host smtp address
     Properties props = new Properties();
     props.put("mail.smtp.host", "smtp.web.de");
     props.put("mail.smtp.auth", "true");

    Authenticator auth = new SMTPAuthenticator();
    Session session = Session.getDefaultInstance(props, auth);

    session.setDebug(debug);

    // create a message
    Message msg = new MimeMessage(session);

    // set the from and to address
    InternetAddress addressFrom = new InternetAddress(from);
    msg.setFrom(addressFrom);

    InternetAddress[] addressTo = new InternetAddress[recipients.length];
    for (int i = 0; i < recipients.length; i++)
    {
        addressTo[i] = new InternetAddress(recipients[i]);
    }
    msg.setRecipients(Message.RecipientType.TO, addressTo);


    // Setting the Subject and Content Type
    msg.setSubject(subject);
    msg.setContent(message, "text/plain");
    Transport.send(msg);
 }
}
```
Nur die verkürzte Form...aber da es schon bei Authentficator hackt reicht des wohl...
Es handelt sich um eine Standalone Applikation...kein J2EE oder ähnliches..

Irgendeine Idde woran es liegen könnte?


----------



## Oliver Gierke (2. Juli 2008)

Was heißt die Pfade sind angegeben? Hast du die Jars im Classpath liegen?

REINHAUN!


----------



## Zanderfilet (2. Juli 2008)

Jup genau das...jars sind im build path angegeben...hab sogar nach ewigem grübeln die source attachment und javadoc location gesetzt....aber pustekuchen...nix is..


----------



## Thomas Darimont (2. Juli 2008)

Hallo,

welche Java Version verwendest du denn?

Folgendes funktioniert bei mir unter Java 6 wunderbar:
schau mal hier:

```
package de.tutorials.mail;

import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMailWithAttachmentExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Properties mailProps = new Properties();

        mailProps.put("mail.smtp.auth", "true");
        mailProps.put("mail.store.protocol", "imap");
        mailProps.put("mail.transport.protocol", "smtp");
        mailProps.put("mail.smtp.socketFactory.port", "456");
        mailProps.put("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
        mailProps.put("mail.imap.host", "imap.baba.de");
        mailProps.put("mail.smtp.host", "smtp.baba.de");

        Session session = Session.getDefaultInstance(mailProps);
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("someone@baba.de"));
        message.setSubject("Test Nachricht");
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(
                "foo@baba.de"));

        message.setText("Test Message");

        message.saveChanges();
        Transport transport = session.getTransport();
        transport.connect("username", "password");
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();

        System.out.println("sent");
    }
}
```

Bei Java Versionen vor Java 6 musste man noch das Java Activation Framework zusätzlich in den Classpath legen. bei Java 6 ist das dabei.

Gruß Tom


----------



## Zanderfilet (2. Juli 2008)

Hallo,

ja das activation hab ich eben daher auch sicherheitshalber mit rein genommen....verwende logischerweise neuste Version (also wohl jre 1.6 update 6)..hab ja alles schon wieder vom System geschmissen und neu installiert...hat aber auch nix gebracht:-(

 @tom ...schaut ja soweit jut aus...evtl. weich ich darauf ab...nur wäre es echt fein zu wissen warum zum Geier eclipse sich bei korrektem Pfad genau nur über diese eine Klasse beschwert...die restlichen Klassen wie Session etc. no prob...nur der blöde authenticator nicht..

Hmmm...keiner ne Idee...? Sonst mach ichs auch zu Fuss...aber wenns die Klasse schon mal gibt und man eh das jar in den Installer packt...wäre schon schön ;-)

P.S.

Da hab ich auch nicht nen Hänger drin (wo auch ;-))?:

import javax.mail.PasswordAuthentication;
import javax.mail.Authenticator;



public class SMTPAuthenticator extends Authenticator
{
 int test = 0;
    public PasswordAuthentication getPasswordAuthentication()
    {
        String username = ("test");
        String password = ("Test");
        return new PasswordAuthentication(username, password);
    }
}

So langsam werd ich wieder zum "bloß keine externen jars" Mensch :-(


----------



## AlexD1979 (11. März 2009)

Bei mir t es auch net... gegen einen Exchange 2007 Server.

Alex


----------

