# Java Mail Fehlermeldung: java.lang.NoClassDefFoundError: javax/mail/internet/AddressException



## HazTe (25. Jul 2014)

Servus,
ich schreibe derzeitig eine Software für einen Studienkollegen und bis jetzt hat alles wunderbar geklappt.
Nun aber will ich dem Programm beibringen, Bestellungsemails zu versenden. Der Email Client als Rohprogramm funktioniert super, aber sobald ich ihn in mein laufendes Programm einbaue geht gar nichts mehr ..
Diese Meldung erhalte ich:
!MESSAGE Unable to create editor ID com.sebulli.fakturama.editors.mailEditor: Die Editorklasse konnte nicht instanziiert werden. Dies weist in der Regel auf einen nicht vorhandenen no-arg-Konstruktor oder auf einen Tippfehler bei der Eingabe eines Editor-Klassennamens in plugin.xml hin.
!STACK 0
java.lang.NoClassDefFoundError: javax/mail/internet/AddressException
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
	at java.lang.Class.getConstructor0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184)
	at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
	at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
	at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
	at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:260)
	at org.eclipse.ui.internal.registry.EditorDescriptor.createEditor(EditorDescriptor.java:235)
	at org.eclipse.ui.internal.EditorManager.createPart(EditorManager.java:875)
	at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:609)
	at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465)
	at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595)
	at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850)
	at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842)
	at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2756)
	at com.sebulli.fakturama.actions.NewMailAction.run(NewMailAction.java:49)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
	at org.eclipse.jface.action.ActionContributionItem$6.handleEvent(ActionContributionItem.java:452)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2701)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2665)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2499)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:679)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:668)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at com.sebulli.fakturama.Application.start(Application.java:40)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1386)
Caused by: java.lang.ClassNotFoundException: javax.mail.internet.AddressException
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:513)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	... 53 more


Die JAR zu den Properties und dem Build Path schon hinzugefügt, nun weiß ich nicht mehr weiter und bin mittlerweile total entnervt 
hoffe auf Unterstützung, danke!!
MfG HazTe


----------



## Topfpflanze (25. Jul 2014)

In Zeile 31 verwendest du eine Primzahl wo eigentlich eine Zweierpotenz verwendet werden müsste.


----------



## HazTe (25. Jul 2014)

Sorry, aber damit kann ich sehr wenig anfangen, oder ist dies als "witz" gemeint?


----------



## Sorainthy (26. Jul 2014)

Genau dies wollte dir Topfpflanze auch sagen!

Deine ganze Frage ist Mist.
Du beschreibst nur das Ergebnis des Fehlers ohne den Ursprung zu liefern. Was sollen die netten Leute dir auch anderes sagen, wenn du NULL Code mitlieferst?

Du gehst doch auch nicht zu nem Arzt und sagst: Ich hab schmerzen, was kann dies sein? 
Ohne deinen Unfall zu beschreiben, der dir dein Bein gebrochen hat....


----------



## HazTe (26. Jul 2014)

Sorry, bin davon ausgegeangen, dass das ein allgemeines Problem ist und jemand vielleicht die Fehlermeldung schonmal gesehen hat. Hier der code:
Aufrufende Klasse:

```
public void createItemStrings() {
		DataSetContact contact;
		DataSetProduct product;
		for (int i = 0; i < allContacts.size(); i++) {
			contact = allContacts.get(i);
			contact.setBooleanValueByKey("active", true);
			
			for (int y = 0; y < allProducts.size(); y++) {
				product = allProducts.get(y);
				if (contact.getStringValueByKey("company").equals(
						product.getStringValueByKey("marke"))) {
					product.setBooleanValueByKey("active", true);
					
					//toSend[i] += "1 x " + product.getStringValueByKey("name")
						//	+ ", " + product.getStringValueByKey("groesse")
							//+ ", " + product.getStringValueByKey("farbe");
				}
				
		MailTest.send();
				
				contact.setBooleanValueByKey("active", false);
				for (int x = 0; x < allProducts.size(); x++) {
					product = allProducts.get(y);
					product.setBooleanValueByKey("active", false);
				}
			}
		}
		
	}
```

In der umsetzenden Klasse, wie gesagt, diese funktioniert normal einwandfrei ???:L

```
package Mail;
 
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.sebulli.fakturama.data.Data;
import com.sebulli.fakturama.data.DataSetContact;
 
public class MailTest
{
   


	public static void send() {
	 
	//TRAUDICH("w00fd840.kasserver.com", 25, "m02b1b42", "2sbbgj96", "hochzeit@fraeulein-traudich.de", "Benny | Fraeulein Traudich"),
	 
    String from = "hochzeit@fraeulein-traudich.de";
    DataSetContact contact = Data.INSTANCE.getContacts().getByBooleanValue("active", true);
    String to = contact.getStringValueByKey("email");

    String host = "w00fd840.kasserver.com";
    int port = 587;

    try {

        final String username = "xxxx";
        final String password = "xxxx";

        Properties props = new Properties();

        props.setProperty("mail.smtp.host", host);
        props.setProperty("mail.smtp.port", "587");
        props.setProperty("mail.smtps.auth", "true");
        props.setProperty("mail.debug", "true");
        props.setProperty("mail.user", username);
        props.setProperty("mail.password", password);

        Session session = Session.getDefaultInstance(props,
                new Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username,
                                password);
                    }
                });

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress(from));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(to));
        message.setSubject("TEST");
        message.setText("Das ist ein Test-Mail.");

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

        System.out.println("Nachricht gesendet!");

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}
}
```


----------



## Anti-Banane (26. Jul 2014)

gut ... das DER code knallt ist klar ... denn TCP/587 ist eben NICHT SMTPS (SMTP over SSL) ... sondern SMTP over TLS ... weshalb du auch entsprechend STARTTLS nutzen musst

hier mal ein korrektes beispiel


```
package mail;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendMailTLS
{
	public static void main(String[] args) throws Exception
	{
		String host="host";
		int port=587;
		String user="user@host";
		String pass="XXX";
		
		Properties props=new Properties();
		props.put("mail.smtp.starttls.enable", "true");
		
		Session session=Session.getInstance(props);
		Transport transport=session.getTransport("smtp");
		transport.connect(host, port, user, pass);

		Address[] addresses=InternetAddress.parse("recipient@recipient-host");
		
		Message message=new MimeMessage(session);
		message.setFrom(new InternetAddress(user));
		message.setRecipients(Message.RecipientType.TO, addresses);
		message.setSubject("TEST SUBJECT");

		message.setText("text/plain BODY");

		transport.sendMessage(message, addresses);
		System.out.println("SEND");

		transport.close();
	}
}
```

die exception ist relativ eindeutig : NoClassDefFoundError
heißt auf deutsch das er die klasse nicht finden kann
spotan würde ich behaupten das du das "plugin" nicht korrekt gebaut hast und damit halt teile in diesem fehlen

was du aber nur rein zufällig bemerkst da halt der code den du nutzt n fehler wirft da er schlicht falsch ist


außerdem würde bei dir eigentlich "transport.connect()" reichen da du alle login-daten bereits im Properties-objekt übergibst

zieh dir noch mal die doc zu javamail rein ...


----------

