4

I wrote a program to check mails with JavaMail. Here is the code:

private static Folder getFolder(String popHost, int openPort, MailAuthenticator auth) throws MessagingException{
    try{
        store.close();
    }catch(Exception e){
        System.out.println("Store konnte nicht geschlossen werden: "+e.getMessage());
    }
    Properties properties = System.getProperties();
    properties.setProperty("mail.store.protocol", "pop3");
    properties.setProperty("mail.pop3.host", popHost);
    properties.setProperty("mail.pop3.port", String.valueOf(openPort));
    properties.setProperty("mail.pop3.auth", "true");
    properties.setProperty( "mail.pop3.socketFactory.class",
            "javax.net.ssl.SSLSocketFactory" ); 
    Session session = Session.getInstance(properties, auth);
    session.setDebug(true);
    store = session.getStore( "pop3" );
    store.connect();
    return store.getFolder( "INBOX" );

It works perfectly on my PC, but it should run on my Raspberry Pi. On Raspberry store.connect() throws a AuthenticationFailedException:

DEBUG: setDebug: JavaMail version 1.5.5
DEBUG: getProvider() returning   javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]
DEBUG POP3: mail.pop3.rsetbeforequit: false
DEBUG POP3: mail.pop3.disabletop: false
DEBUG POP3: mail.pop3.forgettopheaders: false
DEBUG POP3: mail.pop3.cachewriteto: false
DEBUG POP3: mail.pop3.filecache.enable: false
DEBUG POP3: mail.pop3.keepmessagecontent: false
DEBUG POP3: mail.pop3.starttls.enable: false
DEBUG POP3: mail.pop3.starttls.required: false
DEBUG POP3: mail.pop3.apop.enable: false
DEBUG POP3: mail.pop3.disablecapa: false
DEBUG POP3: connecting to host "pop.goneo.de", port 995, isSSL false
<EOF>
javax.mail.AuthenticationFailedException: EOF on socket
    at com.sun.mail.pop3.POP3Store.protocolConnect(POP3Store.java:209)
    at javax.mail.Service.connect(Service.java:388)
    at javax.mail.Service.connect(Service.java:246)
    at javax.mail.Service.connect(Service.java:195)
    at MailInterface.getFolder(MailInterface.java:294)
    at MailInterface.getFolder(MailInterface.java:253)
    at MailWatch.checkMailAccount(MailWatch.java:75)
    at MailWatch.checkMails(MailWatch.java:46)
    at MailWatch.run(MailWatch.java:25)

Why can't my Raspberry connect to host, but my PC can? How can I fix it on Raspberry?

Ozelot
  • 105
  • 1
  • 9
  • please change `Store store = session.getStore("pop3");` with `Store store = session.getStore("pop3s");` and let me know it works or not – Mohsen Dec 11 '18 at 12:31
  • It doesn't work: `javax.mail.AuthenticationFailedException: failed to connect at javax.mail.Service.connect(Service.java:403) at javax.mail.Service.connect(Service.java:246) at javax.mail.Service.connect(Service.java:195) at MailInterface.getFolder(MailInterface.java:294) at MailInterface.getFolder(MailInterface.java:253) at MailWatch.checkMailAccount(MailWatch.java:75) at MailWatch.checkMails(MailWatch.java:46) at MailWatch.run(MailWatch.java:25)` – Ozelot Dec 11 '18 at 12:39
  • did you also change all the properties to `pop3s` too? I mean `mail.pop3.*` should change to `mail.pop3s.*` – Mohsen Dec 11 '18 at 12:45
  • Does it works?? – Mohsen Dec 11 '18 at 13:36
  • Yes, with pop3s in all properties it works. Thanks! Had new problems with ssl-handshakes, but I solved it by `properties.setProperty("mail.pop3s.ssl.trust", "*");` – Ozelot Dec 11 '18 at 13:47
  • I added that as answer for other people who face this problem, thanks – Mohsen Dec 11 '18 at 13:51
  • Please vote my answer up if it was useful for you :) – Mohsen Dec 11 '18 at 15:10

2 Answers2

6

You can solve this problem by converting pop3 to pop3s like this:

properties.setProperty("mail.store.protocol", "pop3s");
properties.setProperty("mail.pop3s.host", popHost);
properties.setProperty("mail.pop3s.port", String.valueOf(openPort));
properties.setProperty("mail.pop3s.auth", "true");
properties.setProperty("mail.pop3s.socketFactory.class",
        "javax.net.ssl.SSLSocketFactory" ); 
properties.setProperty("mail.pop3s.ssl.trust", "*");

store = session.getStore( "pop3s" );
Mohsen
  • 4,536
  • 2
  • 27
  • 49
3

Get rid of all the socket factory settings and set mail.pop3.ssl.enable to true.

Bill Shannon
  • 29,579
  • 6
  • 38
  • 40