Hi,
ich habe folgendes Problem:
Ich will mittles der JavaMail API meine Mails via IMAP von meinem MailServer abrufen.
Der Verbindungsaufbau klappt und es werden auch die Mails aus der INBOX geladen.
Ich kann das Datum, den Betreff und den Sender aus dem Message-Objekt auslesen, sobald ich aber auf den CONTENT des Message-Objekts zugreifen möchte z.B. hier:
oder
bekomm ich eine NULLPointerException und ich kann mir leider nicht erklären warum
Was mach ich falsch???
Im Grunde mach ich alles so wie es im Netz überall zu finden ist...
Ich hoffe ihr könnt mir helfen .
Ergänzende Frage:
Ist der Aufbau der Mailverbindung eigentlich irgendwie gesichert oder wird da der Benutzername u Passwort unverschlüsselt übertragen?
ich habe folgendes Problem:
Ich will mittles der JavaMail API meine Mails via IMAP von meinem MailServer abrufen.
Der Verbindungsaufbau klappt und es werden auch die Mails aus der INBOX geladen.
Java:
public class MailServiceImpl extends RemoteServiceServlet implements MailService, Serializable{
String user;
String password;
ArrayList<String> responseJsonList;
public MailServiceImpl() {}
public ArrayList<String> getMails(String user, String pass){
String mailDomain = "@domain.xy";
//haengt hinter den User noch die mailDomain damit der Anmeldename komplett ist
this.user = user + mailDomain;
this.password = pass;
System.out.println("User: "+ this.user + "/ Pasw: " + this.password);
String host = "mail.domain.xy";
try{
//System Properties holen
Properties properties = System.getProperties();
//Mail-Server properties: Session verlangt die Informationen über Host, User, Passwd etc.
properties.put("mail.imap.host", host);
properties.put("mail.imap.auth", "true");
//Initialisierung der Auth-Klasse zur Mail-Account-Authentisierung; in Session benutzt
Authenticator auth = new MailAuthenticator();
//Verbindung zum MailServer
Session mailSession = Session.getDefaultInstance(properties, auth);
//Gibt in der Console eine Debug-Meldung zum Verlauf aus
mailSession.setDebug(false);
Folder mailFolder = openIMAPInboxReadOnly(mailSession);
Message messages[] = mailFolder.getMessages();
System.out.println("Anzahl der Nachrichten: " + messages.length);
showMails(messages);
responseJsonList = new ArrayList<String>();
for(int i=0; i < messages.length; i++ ){
MessageResponseObject messageResp = new MessageResponseObject();
messageResp.setDate(messages[i].getSentDate().toString());
messageResp.setFrom(messages[i].getFrom().toString());
messageResp.setSubject(messages[i].getSubject());
messageResp.setContent(messages[i].getContent().toString());
String jsonString = createJsonString(messageResp);
System.out.println("TEST:" + jsonString);
responseJsonList.add(jsonString);
System.out.println("Anzahl an NAchrichten im Array: " + responseJsonList.size());
}
closeInbox(mailFolder);
}catch(Exception err){
System.out.println("Die Anmeldung ist fehlgeschlagen!");
System.out.println(err);
}
return responseJsonList;
}
Java:
/**
* Create a JSON String for the network transport
* @param messageResp
* @return
*/
private String createJsonString(MessageResponseObject messageResp){
Gson gson = new Gson();
return gson.toJson(messageResp, MessageResponseObject.class);
}
/**
* Erzeugt das Authenticator-Objekt zur Anmeldung am MailAccount
* @author Kumaro
*
*/
private class MailAuthenticator extends javax.mail.Authenticator {
public PasswordAuthentication getPasswordAuthentication(){
//System.out.println("User: "+ user + "/ Pasw: " + password);
return new PasswordAuthentication(user, password);
}
}
/**
* Erzeugt das Store-Objekt über IMAP und legt die EMails dann im MailFolder ab und gibt dieses Objekt zurück
* @param mailSession
* @return mailFolder
* @throws MessagingException
*/
private Folder openIMAPInboxReadOnly(Session mailSession) throws MessagingException{
//Store dient zum Ablegen der Nachrichten
Store mailStore = mailSession.getStore("imap");
mailStore.connect();
//Folder ist ein Ordner-Objekt für Mails
Folder mailFolder = mailStore.getFolder("INBOX");
mailFolder.open(Folder.READ_ONLY);
return mailFolder;
}
/**
* Beendet die Verbindung zum InboxOrdner
* @param mailFolder
* @throws MessagingException
*/
private void closeInbox(Folder mailFolder) throws MessagingException{
mailFolder.close(true);
mailFolder.getStore().close();
}
/**
* Gibt die Mails aus
* @param message
* @throws MessagingException
* @throws IOException
*/
private void showMails(Message[] message) throws MessagingException, IOException{
for(int i=0;i<message.length;i++){
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!" + message.length);
Message m = message[i];
System.out.println( "-----------------------\nNachricht: " + i );
System.out.println( "Von: " + Arrays.toString(m.getFrom()) );
System.out.println( "Betreff: " + m.getSubject() );
System.out.println( "Gesendet am: " + m.getSentDate() );
System.out.println( "Content: " + m.getContent() );
}
}
Ich kann das Datum, den Betreff und den Sender aus dem Message-Objekt auslesen, sobald ich aber auf den CONTENT des Message-Objekts zugreifen möchte z.B. hier:
Java:
messageResp.setContent(messages[i].getContent().toString());
Java:
System.out.println( "Content: " + m.getContent() );
bekomm ich eine NULLPointerException und ich kann mir leider nicht erklären warum
Was mach ich falsch???
Im Grunde mach ich alles so wie es im Netz überall zu finden ist...
Ich hoffe ihr könnt mir helfen .
Ergänzende Frage:
Ist der Aufbau der Mailverbindung eigentlich irgendwie gesichert oder wird da der Benutzername u Passwort unverschlüsselt übertragen?
Zuletzt bearbeitet von einem Moderator: