# Probleme mit JavaMail und JAR-File



## chrissy (10. Mai 2007)

Hallo,

irgendwie bin ich leicht am verzweifeln ... ich habe ein einfaches Programm, was nur eine Email versendet
Den Code habe ich aus "Java ist auch eine Insel"

```
package mail;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;

public class Email
{
  public static void postMail( String recipientTo,
                               String recipientCC,
                               String subject, 
                               String message, String from ) 
      throws MessagingException 
    { 
      Properties props = new Properties(); 
      props.put( "mail.smtp.host", "MailServer.Zuhause.de" ); 
      Session session = Session.getDefaultInstance( props ); 
      Message msg = new MimeMessage( session ); 
      InternetAddress addressFrom = new InternetAddress( from ); 
      msg.setFrom( addressFrom ); 
      InternetAddress addressTo = new InternetAddress( recipientTo ); 
      InternetAddress addressCC = new InternetAddress( recipientCC);
      msg.setRecipient( Message.RecipientType.TO, addressTo ); 
      msg.setRecipient( Message.RecipientType.CC, addressCC ); 
      msg.setSubject( subject ); 
      msg.setContent( message, "text/plain" ); 
      Transport.send( msg ); 
    } 
   
    public static void main( String[] args ) throws Exception 
    { 
      postMail( "ich@zuhause.de", 
                "ich@zuhause.de", 
                "Test", 
                "Nachricht", 
                "du@zuhause.de"); 
    }
}
```

Das funktioniert auch alles ganz super in meiner Entwicklungsumgebung (JDeveloper).
Wenn ich nun ein JAR erstelle, bekomme ich immer die Fehlermeldung "Could not find main class. Program will exit." Ich hatte diesen Fehler schon einmal, da hat nur eine Leerzeile am Ende gefehlt, nun habe ich aber schon meinen ganzen Code ausdokumentiert und in ein neues File zeilenweise reinkopiert. Und wenn ich den Code für die Message (alle Zeilen die mit msg anfangen und Transport.send(msg)) weglasse funktioniert das JAR (natürlich bis auf den MAil-Versand). 
Hat irgendjemand eine Ahnung woran das liegen kann???

Danke 
chrissy


----------



## André Uhres (10. Mai 2007)

Hast du die "mail.jar" im Classpath?


----------



## chrissy (11. Mai 2007)

Hallo André,

das hatte ich schon überprüft, die mail.jar ist drin.
Weitere Ideen?

Danke


----------



## André Uhres (11. Mai 2007)

"activation.jar" ? (falls benötigt)


----------



## chrissy (11. Mai 2007)

Hallo André,

activation.jar ist ebenfalls im Classpath. Ich habe die jars auch nochmal rausgenommen und dann getestet. da kommen ganz andere Fehlermeldungen. 
Es muss doch irgendwie möglich sein, das die Anwendung auch im jar ohne Fehler läuft, wenn Sie in der Entwicklungsumgebung ohne Fehler durchläuft.

chrissy


----------



## André Uhres (11. Mai 2007)

Bei mir funzt dein Proggi.

Ich hab dies im Manifest:
*Main-Class: mail.Email*
*Class-Path: lib/mail.jar*
und ganz zum Schluss eine Leerzeile

Im Verzeichnis, wo deine jar-Datei ist, hab ich ein Unterverzeichnis "lib" mit der "mail.jar"


----------



## chrissy (11. Mai 2007)

Hallo André,

Ich habe jetzt nochmal im JDeveloper nachgelesen, wenn man ein jar in die "Libraries" aufnimmt, wird sie automatisch dem class path hinzugefügt. Wenn ich das Projekt starte, zeigt es mir auch im Meldungsfenster and das activation.jar und mail.jar im class path enthalten sind.

Wenn ich allerdings auf das deploay-file gehe und in der Voransicht das Manifest ansehe, steht nur folgendes drin:

Manifest-Version: 1.0
Created-By: Oracle JDeveloper 10g 10.1.3.0.4
Main-Class: mail.Email

Ein Unterverzeichnis lib habe ich nicht in meinem Verzeichnis mit dem jar. Allerdings habe ich schon oft jars so in die Library eingebunden und es hat bisher immer funktioniert.


----------



## chrissy (11. Mai 2007)

Hallo,

ich habe jetzt festgestellt, dass ich in meiner Entwicklungsumgebung und dem Client 2 verschiedene Java-Versionen benutzt habe: JDeveloper 1.5.0_05, Client 1.6.0_01. 
Wenn ich in meinem JDeveloper 1.6.0_01 benutze bekomme ich den gleichen Fehler im Popup. Im Message-Fenster von JDeveloper:
Exception in thread main
java.lang.NoClassDefFoundError: email.sendmail

Die activation.jar habe ich entfernt, da sie ja mit 1.6 nicht mehr benötigt wird. Was mache ich nun noch falsch?

chrissy


----------



## chrissy (14. Mai 2007)

Hi,

Jetzt bin ich nochmal alles zeilenweise durchgegangen, anscheinend gibt es schon in der Zeile 18 (Code vom ersten Posting) Probleme.
Ich bekomme dort folgende Fehler, mit denen ich leider überhaupt nichts anfangen kann.

Exception in thread main
java.lang.ExceptionInInitializerError: java.lang.RuntimeException
	at sun.text.normalizer.NormalizerBase.decompose(Unknown Source)
	at sun.text.normalizer.NormalizerBase$NFKDMode.normalize(Unknown Source)
	at sun.text.normalizer.NormalizerBase.normalize(Unknown Source)
	at sun.text.normalizer.NormalizerBase.normalize(Unknown Source)
	at java.text.Normalizer.normalize(Unknown Source)
	at sun.security.x509.AVA.toRFC2253CanonicalString(Unknown Source)
	at sun.security.x509.RDN.toRFC2253StringInternal(Unknown Source)
	at sun.security.x509.RDN.toRFC2253String(Unknown Source)
	at sun.security.x509.X500Name.getRFC2253CanonicalName(Unknown Source)
	at sun.security.x509.X500Name.equals(Unknown Source)
	at sun.security.pkcs.PKCS7.getCertificate(Unknown Source)
	at sun.security.pkcs.SignerInfo.getCertificate(Unknown Source)
	at sun.security.pkcs.SignerInfo.verify(Unknown Source)
	at sun.security.pkcs.PKCS7.verify(Unknown Source)
	at sun.security.pkcs.PKCS7.verify(Unknown Source)
	at sun.security.util.SignatureFileVerifier.processImpl(Unknown Source)
	at sun.security.util.SignatureFileVerifier.process(Unknown Source)
	at java.util.jar.JarVerifier.processEntry(Unknown Source)
	at java.util.jar.JarVerifier.update(Unknown Source)
	at java.util.jar.JarFile.initializeVerifier(Unknown Source)
	at java.util.jar.JarFile.getInputStream(Unknown Source)
	at sun.misc.URLClassPath$JarLoader$2.getInputStream(Unknown Source)
	at sun.misc.Resource.cachedInputStream(Unknown Source)
	at sun.misc.Resource.getByteBuffer(Unknown Source)
	at java.net.URLClassLoader.defineClass(Unknown Source)
	at java.net.URLClassLoader.access$000(Unknown Source)
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClassInternal(Unknown Source)
	at email.SendJavaMail.postMail(SendJavaMail.java:16)
	at email.SendJavaMail.main(SendJavaMail.java:30)
Caused by: java.lang.RuntimeException: could not locate data
	at sun.text.normalizer.NormalizerImpl.<clinit>(Unknown Source)
	... 35 more
Process exited with exit code 1.

Weiss jemand woran das liegt, ich nutze jetzt JRE 1.6, da das bei uns die meisten Clients drauf haben.

Viele Dank
chrissy


----------



## Leroy42 (14. Mai 2007)

chrissy hat gesagt.:
			
		

> ich nutze jetzt *JRE 1.6*, da das bei uns die _meisten Clients_ drauf haben



Du Glücklicher!  :shock: 

(sorry, mußte raus)

Zu deinem eigentlichen Problem kann ich dir leider nicht weiterhelfen.   

Aber da findet sich bestimmt wer!


----------



## chrissy (14. Mai 2007)

Ich glaube ich wäre glücklicher, wenn alle 1.5 drauf hätten ... 
 :cry: 

Irgendwelche hilfreichen Beiträge ???


----------

