javamail: versch. Postfächer auslesen

Status
Nicht offen für weitere Antworten.

magic_halli

Bekanntes Mitglied
Hi,

ich lese in einem Programm hintereinander verschiedene IMAP-Postfächer aus. Nun habe ich ein seltsames Verhalten festgestellt, dass mir Rätsel aufgibt!
Mein Vorgehen:
1. Postfach A auslesen und Mailcontent´s etc. jeder Mail in A.xml speichern
2. Postfach B auslesen und Mailcontent´s etc. jeder Mail in B.xml speichern
3. Postfach C auslesen und Mailcontent´s etc. jeder Mail in C.xml speichern

Für 1.-3. gibt es jeweils eine eigene Funktion (die sich nur im Postfach-Login und Speicherpfad der XML-Datei unterscheiden), die alle nacheinander in der main() aufgerufen werden:

Code:
public static void main(String[] args)  throws Exception {
      getAnfragenMail();

      getReklamationenMail();

      getAuftragseingangMail();
}


private static void getAnfragenMail(){
   //Funktionalität
}

Eine Funktion einzeln für sich aufgerufen macht genau das, was sie soll. Jedoch so wie oben aufgerufen, macht nur die zuerst aufgerufe Funktion ihre Arbeit korrekt, die nachfolgenden machen nichts!!!
Ich hab jetzt schon den Code tausend mal durchgesehen - scheint alles korrekt zu sein.

Von der Abarbeitung her macht ja Funktion 2 und 3 erst los, wenn ihr jeweiliger Vorgänger seine Arbeit beendet hat?! Von daher, hab ich keine Ahnung, woran dieses Verhalten liegen könnte! :cry:

Ist vielleicht irgendwas an den Funktionsaufrufen in der main falsch (wäre die einzige Möglichkeit für mich)? ???:L :roll:
Hat jemand irgend eine Idee?

Danke und Gruß
 

Marede

Mitglied
Klingt, als ob hierbei eine Exception geworfen wird und anschließend die nachfolgenden Methoden (logischerweise) nicht mehr ausgeführt werden.
Versuch doch mal, die Exceptions in der main-Methode abzufangen und deren Stacktrace auszugeben. Im Moment wirft die main-Methode eine etwaige (Runtime)Exception einfach weiter.
 

Einwegdose

Aktives Mitglied
magic_halli hat gesagt.:
Von der Abarbeitung her macht ja Funktion 2 und 3 erst los, wenn ihr jeweiliger Vorgänger seine Arbeit beendet hat?!

Das stimmt zwar schon, aber wenn in einer der Methoden (bzw. in allen) Threads gestartet werden laufen diese ja unabhängig von deiner Methode weiter. Und im Fall von JavaMail könnte ich mir gut vorstellen dass dort ein Runnable versteckt ist ...
 

Maeher

Bekanntes Mitglied
magic_halli hat gesagt.:
Ist vielleicht irgendwas an den Funktionsaufrufen in der main falsch (wäre die einzige Möglichkeit für mich)? ???:L :roll:
Ich fürchte daran liegt es nicht.
Ich hätte noch folgende Ideen:
  • Die Methode gibt überhaupt nicht wieder zurück (wird das Programm hängt in der ersten Methode beendet)
  • Du verwendest irgendwelche statischen Variablen
  • Die hinteren beiden Methoden haben irgendeinen fuktionalen Fehler (irgend ein Wert nicht angepasst etc.)
In jedem Fall würde ich mal versuchen mit einem Debugger oder System.out den Ablauf nachzuvollziehen.
 

magic_halli

Bekanntes Mitglied
Ich habe das Problem soweit eingegrenzt, um sagen zu können, wo der Fehler (höchst wahrscheinlich) liegt. Nur warum das so ist und wie ich´s beheben kann, weiß ich noch nicht...
Jede meiner 3 Funktionen (siehe erstes Posting) ruft in ihrer Funktionalität eine Authenticator-Klasse für javamail auf (hier aus Forum bekommen), um sich am Postfach anzumelden. Hier erstmal die Auth-Klasse:
Code:
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/** 
 * Das ist ein Klasse die definiert wird und die von javax.mail.Authenticator erben muss!
 * Diese Klasse muss die Methode getPasswordAuthentication() implementieren!
 * das ist die Methode, die aufgerufen wird, bei der Überprüfung des jeweiligen Mail-Accountes.
 */

class myAuthenticator extends Authenticator {

        /**
         * Ein String, der den Usernamen nach der Erzeugung eines
         * Objektes

         * dieser Klasse enthalten wird.
         */
        private final String user;
        
        
        /**
         * Ein String, der das Passwort nach der Erzeugung eines
         * Objektes

         * dieser Klasse enthalten wird.
         */
        private final String password;

        
        /**
         * Der Konstruktor erzeugt ein MailAuthenticator Objekt

         * aus den beiden Parametern user und passwort.
         *
         * @param user
         *            String, der Username fuer den Mailaccount.
         * @param password
         *            String, das Passwort fuer den Mailaccount.
         */
        public myAuthenticator(String user, String password) {
            this.user = user;
            this.password = password;
        }

        
        /**
         * Diese Methode gibt ein neues PasswortAuthentication
         * Objekt zurueck.
         *
         * @see javax.mail.Authenticator#getPasswordAuthentication()
         */
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(this.user, this.password);
        }

    }
Hier mal meine 1. Funktion vom Aufruf mit ihrem relevanten Inhalt:
Code:
private static void getAnfragenMail(){
	
		try{
			String imapHost = "10.0.0.1";
			String username = "anfragen";
			String password = "geheim";
			
			// Get system properties
			Properties props = System.getProperties();
			//Mail-Server properties: Session verlangt die Informationen über Host, User, Passwd etc.
			props.put("mail.imap.host", imapHost);
			props.put("mail.imap.auth", "true");
	
			// Initialisierung der Auth-Klasse zur Mail-Account-Authentisierung; für Session benutzt
			myAuthenticator auth = new myAuthenticator(username, password);
			
			// Session: steht für die Verbindung mit dem Mail-Server		
			Session session = Session.getDefaultInstance(props, auth);
			//Gibt in der Console Debug-Meldungen zum Verlauf aus
			session.setDebug(false);
			
			// Store: Platzhalter; dient zum Ablegen der Nachrichten
			Store store = session.getStore("imap");
			store.connect();
			
			// Folder: ist ein Ordner-Object (Container) für Mails
			Folder folder = store.getFolder("INBOX");
			folder.open(Folder.READ_WRITE);
			
			// get Directory
			Message message[] = folder.getMessages();
			
			System.out.println("Mail-Anzahl = " + message.length);
			if(message.length > 0){
            //Mails bearbeiten

         }
         //... weitere Funktionalitäten

      }catch(Exception err){
         err.printStackTrace();
}
Dieser Code ist bei jeder meiner drei Funktionen gleich, außer die Strings 'username' und 'password'. Beim Aufruf der Klasse 'myAuthenticator' werden diese Strings dort hinein gegeben und somit ermittelt, ob der Login zum IMAP-Server korrekt ist.
Doch anscheinend merkt sich 'myAuthenticator' nur die Logindaten der Funktion, aus welcher 'myAuthenticator' das erste mal aufgerufen wurde?! ...denn wenn ich in den nachfolgenden Funktionen fehlerhafte Logindaten eingebe, kommt kein Fehler. Wenn ich in der zuerst aufgerufenen Funktion fehlerhafte Logindaten eingebe, bekomme ich eine "javax.mail.AuthenticationFailedException: Login failed: authentication failure" für alle meine 3 Funktionen!!!

Somit weiß ich nun, dass die Logindaten beim Aufruf nachfolgender Funktionrn noch immer die sind, welche aus der zuerst aufgerufenen Funktion an die Klasse 'myAuthenticator' übergeben wurden!!!


OK, doch wie bekomme ich dieses Verhalten wieder weg, sodass bei jedem neuen Aufruf von 'myAuthenticator' aus einer anderen Funktion auch mit den "neuen" Logindaten gearbeitet wird???

Danke und Gruß


PS: Ich hoffe, ich habe es halbwegs verständlich umschrieben.
 

Maeher

Bekanntes Mitglied
Könnte es sein, dass die .put-Methode hier zu Fehlern führt, weil es ja nicht der selbe String sondern nur der gleiche Inhalt ist und somit evtl. ein neuer Wert angelegt wird, anstatt den alten zu überschreiben? ???:L
Ich würde mal versuchen, ob setProperty(String key, String value) funktioniert.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Javamail Gesendet ordner Java Basics - Anfänger-Themen 1
M Javamail installieren Java Basics - Anfänger-Themen 2
C JavaMail funktioniert nicht immer Java Basics - Anfänger-Themen 8
M javamail android app Java Basics - Anfänger-Themen 3
S JavaMail API E-Mail versenden Probleme Java Basics - Anfänger-Themen 5
B Problem beim Email versenden mit Javamail Java Basics - Anfänger-Themen 5
L JavaMail und mehrere Anhänge Java Basics - Anfänger-Themen 4
D Javamail - Absender-Namen einfügen? Java Basics - Anfänger-Themen 2
F Javamail Java Basics - Anfänger-Themen 5
M Javamail - AOL-IMAP-Postfach abholen Java Basics - Anfänger-Themen 8
A JavaMail liefert Datenmüll Java Basics - Anfänger-Themen 5
G JavaMail: Unrecognized SSL message, plaintext connection? Java Basics - Anfänger-Themen 3
H JavaMail: Beim Versenden tritt ein Fehler auf! Java Basics - Anfänger-Themen 4
G JavaMail Java Basics - Anfänger-Themen 2
G LIstener bei JavaMail Java Basics - Anfänger-Themen 2
D JavaMail Java Basics - Anfänger-Themen 4
M javamail: HTML-Tags aus content eliminieren Java Basics - Anfänger-Themen 2
M Javamail mit Eclipse? Java Basics - Anfänger-Themen 2
M Javamail: Mail als separate Datei speichern? Java Basics - Anfänger-Themen 6
M Javamail: Datumsformat - Frage Java Basics - Anfänger-Themen 2
M Javamail - Anhang speichern Java Basics - Anfänger-Themen 2
G Problem mit javamail Java Basics - Anfänger-Themen 3
G JavaMail funzt nur mit Adressen die ich vorher abgerufen hab Java Basics - Anfänger-Themen 3
H JavaMail Java Basics - Anfänger-Themen 5
D JavaMail Java Basics - Anfänger-Themen 9
P JavaMail API installieren Java Basics - Anfänger-Themen 4
L JavaMail-Fehler: "Helo command rejected" Java Basics - Anfänger-Themen 5
L JavaMail: javax.mail wird nicht gefunden Java Basics - Anfänger-Themen 2
F JavaMail Java Basics - Anfänger-Themen 2
A Anhänge mit Javamail Java Basics - Anfänger-Themen 8
G Methoden Methoden mit versch. Datentypen Java Basics - Anfänger-Themen 1
C Projekte in 2 versch. Arbeitsbereichen: auf ein Projekt verweisen (ohne Fehler zu bekommen) Java Basics - Anfänger-Themen 8
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
N OOP 2 versch. Modi in einem Objekt de/aktivieren Java Basics - Anfänger-Themen 10
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
K Button's mit versch. Aufgaben/ActionListener Java Basics - Anfänger-Themen 12
N Grafische Programmierung mit jeweils anderen Bildern bei versch. Ergebnissen Java Basics - Anfänger-Themen 9
B Wertetabelle mit versch. Formaten aus txt-Datei einlesen Java Basics - Anfänger-Themen 2
D Das Ausführen einer Java Anwendung auf versch Systemen... Java Basics - Anfänger-Themen 5
G Werte übergeben zw. versch. Projekten Java Basics - Anfänger-Themen 2
N ActionListener versch. Buttons zuweisen => versch. Method Java Basics - Anfänger-Themen 13
D Über Button abhängig von Auswahl 2 versch. Fenster öffnen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben