Java8 und JavaMail

Bitte aktiviere JavaScript!
Hallo,

Kann es sein dass JavaMail mit Java8 nicht geht ?

Das lesen der eMails (WEB.DE) habe ich hinbekommen , beim senden kommen immer richtige Pgm-Abstürtzte (nicht in meinem Code).

Falls es so ist dass JavaMail in Verbindung mit Java8 nicht geht, was nimmt man denn dann ?


VilenDank

Volker.
 
A

Anzeige




Vielleicht hilft dir unser Kurs hier weiter —> (hier klicken)
JavaMail geht in den passenden Versionen auch mit Java 8 und höher.

Was ist denn der Fehler? Wenn du den noch nennst, kann man dir sicherlich besser helfen ;)
 
Hallo,

Vielen Dank für die Antwort.

Der Fehler tritt bei der Authentifizierung schon auf. Den genauen FehlerText sowie meinen Code schreibe ich Dir morgen (muss erst heute abend daheim sein)

Viele Grüße

Volker.
 
Hallo,

DEBUG SMTP: protocolConnect returning false, host=smtp.web.de, user=vn, password=<null>

in dieser zeile steht bei "user" nur mein vorname (VN) obwohl meine eMail addresse [email protected] (also vorname , nachname mit "_" getrennt) ist das richtig so?

der gesamte Fehler Text (debug eingeschaltet) lautet :

Code:
DEBUG: setDebug: JavaMail version 1.6.2
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]
DEBUG SMTP: need username and password for authentication
DEBUG SMTP: protocolConnect returning false, host=smtp.web.de, user=vn, password=<null>
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.web.de", port 587, isSSL false
javax.mail.MessagingException: Could not connect to SMTP host: smtp.web.de, port: 587;
  nested exception is:
    javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2211)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
    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 javax.mail.Transport.send0(Transport.java:254)
    at javax.mail.Transport.send(Transport.java:124)
    at MailUtils.postMail(MailUtils.java:62)
    at MailUtils.main(MailUtils.java:38)
Caused by: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at sun.security.ssl.InputRecord.handleUnknownRecord(Unknown Source)
    at sun.security.ssl.InputRecord.read(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    at com.sun.mail.util.SocketFetcher.configureSSLSocket(SocketFetcher.java:626)
    at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:400)
    at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:217)
    at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175)
    ... 8 more

könnt Ihr damit etwas anfangen , braucht Ihr den Code noch dazu?

Viele Grüsse Volker.
 
Zuletzt bearbeitet von einem Moderator:
in dieser zeile steht bei "user" nur mein vorname (VN) obwohl meine eMail addresse [email protected] (also vorname , nachname mit "_" getrennt) ist das richtig so?
Akzeptiert das Web-Interface von web.de nur den Vornamen oder braucht es die volle Adresse ? Das könnte der hier einzusetzende Parameter sein. Das Passwort wird kaum <null> sein.
Und idR sollte man die erste Fehlermeldung abarbeiten:
DEBUG SMTP: need username and password for authentication
DEBUG SMTP: protocolConnect returning false, host=smtp.web.de, user=vn, password=<null>
Vielleicht bietet dieser Quellcode auch einige Anregungen: https://howtodoinjava.com/for-fun-only/how-to-send-email-in-java-using-gmail-smtp-server/
 
Hallo,

danke für die Antwort.

Ich gebe ja im POP3 (lesen) fall ja auch das richtige Password sowie NutzerNamen mit nur im SMTP fall meckert er rum.

hier habe ich mal meinen Code: (stammt komplett aus "Java ist eine insel)

Java:
import java.io.*;
import java.util.*;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;

public class MailUtils
{
   
    public static void main(String[] args)  {
        Session session;
        String modus;
        String user;
        String pw;
       
        user = "[EMAIL][email protected][/EMAIL]";
        pw = "password";
        modus = "SCHREIBEN";
       
        if (modus=="LESEN") {
        System.out.print("Lesen beginn");
        session = getMailSession(user,pw);
        session.setDebug(true);
        Folder folder = null;
        try {folder = openPop3InboxReadOnly(session);} catch (MessagingException e1) {}
        try {printAllTextPlainMessages(folder);} catch (MessagingException | IOException e2) {}
        try {closeInbox(folder);} catch (MessagingException e3) {}
        System.out.print("Lesen ende");
        }
   
        if (modus=="SCHREIBEN") {
        System.out.print("Schreiben beginn");
        session  = getMailSession(user,pw);
        session.setDebug(true);
        try {
            postMail(session, "[EMAIL][email protected][/EMAIL]" ,"Kurze Info", "Hab's verstanden!" );
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.print("Schreiben ende");
        }
               
   
    }    
   
   
   
    public static void postMail( Session session, String recipient,
            String subject, String message )
throws MessagingException
{
Message msg = new MimeMessage( session );

InternetAddress addressTo = new InternetAddress( recipient );
msg.setRecipient( Message.RecipientType.TO, addressTo );

msg.setSubject( subject );
msg.setContent( message, "text/plain" );
Transport.send( msg );
}
   
    public static void printAllTextPlainMessages( Folder folder )
              throws MessagingException, IOException
            {
              for ( Message m : folder.getMessages() )
              {
                System.out.println( "\nNachricht:" );
                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-Type: " +
                                    new ContentType( m.getContentType() ) );

                if ( m.isMimeType( "text/plain" ) )
               System.out.println( m.getContent() );
              }
            }
   
   
    public static Folder openPop3InboxReadOnly( Session session )
              throws MessagingException
            {
              Store store = session.getStore( "pop3" );
              store.connect();

              Folder folder = store.getFolder( "INBOX" );
              folder.open( Folder.READ_ONLY );

              return folder;
            }
            public static void closeInbox( Folder folder ) throws MessagingException
            {
              folder.close( false );
              folder.getStore().close();
            }
   


  public static Session getMailSession( String user, String pass )
  {
    final Properties props = new Properties();

    // Zum Empfangen
    props.setProperty( "mail.pop3.host", "pop3.web.de" );
    props.setProperty( "mail.pop3.user", user );
    props.setProperty( "mail.pop3.password", pass );
    props.setProperty( "mail.pop3.port", "995" );
    props.setProperty( "mail.pop3.auth", "true" );
    props.setProperty( "mail.pop3.socketFactory.class",
                       "javax.net.ssl.SSLSocketFactory" );

    // Zum Senden
    props.setProperty( "mail.smtp.host", "smtp.web.de" );
    props.setProperty( "mail.smtp.auth", "true" );
    props.setProperty( "mail.smtp.port", "587" );
    props.setProperty( "mail.smtp.socketFactory.port", "587" );
    props.setProperty( "mail.smtp.socketFactory.class",
                       "javax.net.ssl.SSLSocketFactory" );
    props.setProperty( "mail.smtp.socketFactory.fallback", "false" );

    return Session.getInstance( props, new javax.mail.Authenticator() {
      @Override protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication( props.getProperty( "mail.pop3.user" ),
                                           props.getProperty( "mail.pop3.password" ) );
      }
    } );
  }
}




viele Grüsse

Volker
 
Versuch mal props.setProperty("mail.smtp.starttls.enable", "true"); oder props.setProperty("mail.smtp.ssl.enable", "true"); als zusätzliche Property.
 
Hallo,

habe ich eben probiert -> gleiches ergebniss.

Ich kann mir aber auch nicht vorstellen dass es eine einstellung ist, denn ich bekomme ja einen Absturtz ich glaube wirklich eher dass das mit Java 8 so nicht geht (oder eine andere JavaMail version) meine Quelle war ja auch bisher Java7.

Viele Grüße Volker.
 
habe ich eben probiert -> gleiches ergebniss.
Beides einzelne probiert?

Ich kann mir aber auch nicht vorstellen dass es eine einstellung ist, denn ich bekomme ja einen Absturtz ich glaube wirklich eher dass das mit Java 8 so nicht geht (oder eine andere JavaMail version) meine Quelle war ja auch bisher Java7.
Das ist ziemlich sicher kein Java 8-Problem.

Den Absturz gibts, weil eine MessagingException auftritt, mit dem oben stehenden Grund. Und der ist nahezu immer ein Konfigurationsproblem.
Welche Java-Mail-Version nutzt du denn?
 
Hallo,

habe ich eben probiert -> gleiches ergebniss.

Ich kann mir aber auch nicht vorstellen dass es eine einstellung ist, denn ich bekomme ja einen Absturtz ich glaube wirklich eher dass das mit Java 8 so nicht geht (oder eine andere JavaMail version) meine Quelle war ja auch bisher Java7.

Viele Grüße Volker.
Dann lad dir Java 7 und stelle selber fest, dass das eher ein Konfigurationsproblem ist.

Fassen wir doch mal zusammen:

- Unrecognized SSL message, plaintext connection?
- https://hilfe.web.de/pop-imap/imap/imap-serverdaten.html (Verschlüsselung)
- "isSSL false"

mrBrown's Spur sollte also passen.
 
In der Insel werden Strings mit == verglichen??o_O
Wobei das hier funktioniert, denn er nutzt nur String Konstanten und die werden nach JLS 15.28 interned, d.h. alle konstanten Strings "LESEN" werden zur gleichen Referenz. Und alle Konstanten "SCHREIBEN" ebenso. Das bedeutet, dass eine Prüfung der Referenzen das richtige Ergebnis bringt.

Aber der Hinweis ist ganz wichtig und richtig. Aber statt da ein Vergleich mit equals zu machen, würde ich hier ein Enum einführen und dann die Enums prüfen. Alleine um hier die "magic numbers" zu verhindern (ja, ist keine Zahl aber bei den magic numbers geht es ja darum, dass man im fließenden Code keine Konstanten hat, daher würde ich das auch hier so bezeichnen.)
 
Hallo,

OK. das mit dem nicht vorhandenen equals habe ich nur in den diesem Post eingebaut , in meinem orginalcode habe ich die Zeilen immer auskommentiert , entschuldigung.

Aber das löst mein eigentliches Problem nun leider auch nicht.

Gibt es nicht irgendwo eine verständliche (auch für mich) Anleitung wie ich die Parameter setzen muss , alles was ich bisher im WWW gefunden habe erzeugt Fehlermeldungen.

Sorry dass ich mich so anstelle (ich programmiere auch nicht so oft in Java)


Viele Grüße

Volker.
 
Die IONOS-Server scheinen STARTTLS zu verwenden. Wirf den SocketFactory-Käse raus und probier für SMTP ausschließlich die folgenden Properties:
Java:
        props.setProperty( "mail.smtp.host", "smtp.web.de" );
        props.setProperty( "mail.smtp.auth", "true" );
        props.setProperty( "mail.smtp.port", "587" );
        props.setProperty( "mail.smtp.starttls.enable", "true");
 
Hallo,

jetzt bin ich einen grossen Schritt weitergekommen. Die Fehlermeldungen sind fast weg und bei der Authentifizierung bekomme ich OK . Aber , Nachdem nun die Mail gesendet werden soll kommt :

554-Transaction failed
554 Unauthorized sender address.
DEBUG SMTP: got response code 554, with response: 554-Transaction failed
554 Unauthorized sender address.

Ich mussste die Sender eMail-Addresse auch in den Properties setzen , sonst gings gar nicht.

Weiss jeman was : 554 Unauthorized sender address.


Viele Grüße

Volker.
 
Setze msg.setFrom(senderAddress); für die betreffende Absenderadresse. Alternativ kannst Du auch die Property mail.smtp.from setzen.
 
Hallo,

leider das gleiche Ergebniss wie vorher.

Der Fehler 554 ist auch nirgends so richtig beschrieben. Müsste eigentlich vom Empfänger Provider kommen.

Kann es sein dass ich keine eMail an mich selbst schicken kann ?


Viele Grüße

Volker.
 
GMX sagt dazu:
"Wenn Sie beim SMTP-Versand über externe E-Mail Programme (Outlook, Thunderbird usw.) die Fehlermeldung "Unauthorized sender address" erhalten, nutzen Sie eine zu Ihrem GMX Postfach abweichende E-Mail-Adresse als Absendeadresse."
 
Hallo,

wenn ich das jetzt richtig verstehe , geht WEB.DE (es geht nicht um GMX, ist aber die gleiche Fehlerbeschreiung) davon aus dass ich nicht mit der eMailadresse meines Postfachs eine eMail versenden will , das ist aber nicht so. Wie gesagt ich schicke sie ja an mich selbst und habe deshalb ja nur eine eMailadresse im JavaCode stehen.

Kann es auch ein Sperreintrag in so einer Blacklist sein ?


Viele Grüße

Volker
 
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben