# Probleme mit Java Mail



## Niggo_ (4. Jul 2017)

Ich habe aus einem anderen Beitrag diesen Java Code kopiert

```
package email;

import java.util.Date;
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* @author zeja
*/
public class SendMailExample {
  
    public void sendMail(String smtpHost,String username,String password,String senderAddress,String recipientsAddress,String subject,String text ){
        MailAuthenticator auth = new MailAuthenticator(username, password);
        Properties properties = new Properties();
        // Den Properties wird die ServerAdresse hinzugefügt
        properties.put("mail.smtp.host", smtpHost);
        properties.put( "mail.smtp.port", "587");

        // !!Wichtig!! Falls der SMTP-Server eine Authentifizierung
        // verlangt
        // muss an dieser Stelle die Property auf "true" gesetzt
        // werden
        properties.put("mail.smtp.auth", "true");
        // Hier wird mit den Properties und dem implements Contructor
        // erzeugten
        // MailAuthenticator eine Session erzeugt
        Session session = Session.getDefaultInstance(properties, auth);
        try {
            // Eine neue Message erzeugen
            Message msg = new MimeMessage(session);
            // Hier werden die Absender- und Empfängeradressen gesetzt
            msg.setFrom(new InternetAddress(senderAddress));
            msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
                    recipientsAddress, false));
            // Der Betreff und Body der Message werden gesetzt
            msg.setSubject(subject);
            msg.setText(text);
            // Hier lassen sich HEADER-Informationen hinzufügen
            msg.setSentDate(new Date( ));
            // Zum Schluss wird die Mail natürlich noch verschickt
            Transport.send(msg);
        }
        catch (Exception e) {
            e.printStackTrace( );
        }
    }
  
    class MailAuthenticator extends Authenticator {
        /**
         * Ein String, der den Usernamen nach der Erzeugung eines
         * Objektes<br>
         * dieser Klasse enthalten wird.
         */
        private final String user;
        /**
         * Ein String, der das Passwort nach der Erzeugung eines
         * Objektes<br>
         * dieser Klasse enthalten wird.
         */
        private final String password;
        /**
         * Der Konstruktor erzeugt ein MailAuthenticator Objekt<br>
         * aus den beiden Parametern user und passwort.
         *
         * @param user
         *            String, der Username fuer den Mailaccount.
         * @param password
         *            String, das Passwort fuer den Mailaccount.
         */
        public MailAuthenticator(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);
        }
    }
  
    public static void main(String[] args) {
        String username = "meinusernamet";
        String password = "meinpasswort";
        String senderAddress ="meine-email@web.de";//someone@web.de
        String recipientsAddress = "empfänger"; //somereceiver@web.de
        String subject = "Fertig";
        String text = "Test";
        String smtpHost = "smtp.web.de";
      
        new SendMailExample().sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
    }
}
```

, nun bekomme ich beim ausführen diese Fehler...


> javax.mail.AuthenticationFailedException: 503 Bad sequence of commands
> 
> at com.sun.mail.smtp.SMTPTransport$Authenticator.authenticate(SMTPTransport.java:826)
> at com.sun.mail.smtp.SMTPTransport.authenticate(SMTPTransport.java:761)
> ...


Bitte helft mir.. 
MfG Niggo


----------



## Meeresgott (4. Jul 2017)

Niggo_ hat gesagt.:


> String username = "meinusernamet";
> String password = "meinpasswort";
> String senderAddress ="meine-email@web.de";_//someone@web.de_
> String recipientsAddress = "empfänger"; _//somereceiver@web.de_
> ...



Da musst die Angaben zu einem existierenden Account machen.

AuthenticationFailedException - Das heißt, dass es den Account gibt aber das Password falsch ist oder dass es den User nicht gibt, sowie es auch heißen kann das es den User mit dem Password gibt dieser allerdings SMTP ausgeschaltet hat- warum auch immer.


----------



## Niggo_ (4. Jul 2017)

Ich danke dir, werde es gleich ausprobieren
;=)


----------



## Niggo_ (4. Jul 2017)

Meeresgott hat gesagt.:


> Da musst die Angaben zu einem existierenden Account machen.
> 
> AuthenticationFailedException - Das heißt, dass es den Account gibt aber das Password falsch ist oder dass es den User nicht gibt, sowie es auch heißen kann das es den User mit dem Password gibt dieser allerdings SMTP ausgeschaltet hat- warum auch immer.


Hab alles kontrolliert...immer noch ohne Erfolg ;(


----------



## Meeresgott (4. Jul 2017)

Und du hast als Provider web.de ?

Probier mal als Port *25 *aus, der wird soweit ich weiß auch genutzt bzw. kann für smtp genutzt werden


----------



## Niggo_ (4. Jul 2017)

Meeresgott hat gesagt.:


> Und du hast als Provider web.de ?
> 
> Probier mal als Port *25 *aus, der wird soweit ich weiß auch genutzt bzw. kann für smtp genutzt werden


Hab ich gerade auch probiert...ändert sich nichts....


----------



## Meeresgott (4. Jul 2017)

Meeresgott hat gesagt.:


> Und du hast als Provider web.de ?



setz mal den auf false -> 
properties.put("mail.smtp.auth", "false");
Habe ich jetzt auch nur gelsen würde in meinen Augen auch wenig Sinn machen, wenn es dann funktioniert aber bei anderen scheint es funktioiert zu haben..


----------



## Meeresgott (4. Jul 2017)

Schick mir bitte mal den Link, wo du die bib javax.mal her hast. Gibt da anscheinend mehrere


----------



## Niggo_ (4. Jul 2017)

Das ist der Link zu der Libary: https://mvnrepository.com/artifact/javax.mail/mail/1.5.0-b01
Hier habe ich den Quelltext gefunden: https://www.tutorials.de/threads/email-mit-javamail-versenden.255387/
Und wenn ich auf 'false' ändere Kommt folgende Fehlermeldung:


> com.sun.mail.smtp.SMTPSendFailedException: 530 Must issue a STARTTLS command first
> 
> at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2108)
> at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:1609)
> ...


----------



## Niggo_ (4. Jul 2017)

Meeresgott hat gesagt.:


> Schick mir bitte mal den Link, wo du die bib javax.mal her hast. Gibt da anscheinend mehrere


Und nochmla vielen Dank das du mir versuchst zu HELFEN !!!!!! 
;=) ;=)


----------



## Meeresgott (4. Jul 2017)

```
properties.put("mail.smtp.auth", "false");
properties.put( "mail.smtp.port", "587");
properties.put("mail.smtp.starttls.enable", "true");
```

Prrober das mal mit deinem Port und wenn das nicht klappt setz mail.smtp.auth wieder auf true. 

Sry muss grade selber rum Doktoren


----------



## Niggo_ (5. Jul 2017)

Meeresgott hat gesagt.:


> ```
> properties.put("mail.smtp.auth", "false");
> properties.put( "mail.smtp.port", "587");
> properties.put("mail.smtp.starttls.enable", "true");
> ...





Hab ich probiert, funzt immer noch nicht....
Wenn du fertig bist mit rumdoktren wäre es voll cool wenn du mir nochma helfen könntest.... DANKE SCHONMAL ;=)


----------



## Robat (5. Jul 2017)

Was hast du denn bei `username` drinne stehen? 
Normalerweise (ausgehend von meinen Erfahrungen) musst du da auch deine E-Mail Adresse reinschreiben.
In `username` und `senderAddress` müssten also in dem Moment das selbe drinne stehen.


----------



## Meeresgott (5. Jul 2017)

Ich habe es leider auch nicht mehr zum laufen bekommen. Bei mir bekomme ich nur einen TimeOut .
Tut mir leid ich fürchte ich kann dir da leider doch nicht helfen.


----------



## JStein52 (9. Jul 2017)

Bei mir funktioniert das hier:

```
public static void sendMail(String betreff, String text, String empfaenger, String versender,
                                    String username, String password, String host, String port) {
        //String port = "465";
       
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", host);
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.smtp.port", port);
        props.setProperty("mail.smtp.socketFactory.port", port);
        props.setProperty("mail.smtp.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        // Get the Session object.
        Session session = Session.getInstance(props,
                new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
       
        //session.setDebug(true);

        try {
            // Create a default MimeMessage object.
            Message message = new MimeMessage(session);

            // Set From: header field of the header.
            message.setFrom(new InternetAddress(versender));

            // Set To: header field of the header.
            String[] myRecipients = empfaenger.trim().split(";|,");
            for (String recipient : myRecipients) {
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(recipient));
            }

            // Set Subject: header field
            message.setSubject(betreff);

            // Now set the actual message
            message.setText(text);

            // Send message
            Transport.send(message);

            System.out.println("Sent message successfully....");

        } catch (MessagingException e) {
            throw new RuntimeException(e);
        }
}
```
mit verschiedenen Providern getestet.


----------

