# E-Mail (web.de) mit Java verschicken



## DaveDarell (19. Oktober 2020)

Hallo zusammen,

ich habe folgendes Problem:

Ich will eine Permutation erstellen (2 Ziehungen, Zahlen 1 bis 9). Vorne soll 1 bis 9 durchlaufend nummeriert werden und nach einem Bindestrich die beiden "Ergebnisse" der Permutation ausgegeben werden. Beispielsweise soll das dann so aussehen:

1 - 2 3
2 - 1 1
3 - 4 5
...

Anschließend soll eine E-Mail verschickt werden. Person 1 erhält im Text die Nachricht Hallo xy,
du hast Person 2 und 3 gezogen. Person 2 ... du hast Person 1 und 1 gezogen...

Habe folgende Codes:

Permutation:


```
// Java implementation of the approach
    import java.util.*;
    import java.lang.Math;
    
    class GfG
    {
    
        // Function to return the next random number
        static int getNum(ArrayList<Integer> v)
        {
          

          
            // Size of the vector
            int n = v.size();
        
            // Make sure the number is within
            // the index range
            int index = (int)(Math.random() * n);
        
            // Get random number from the vector
            int num = v.get(index);
        
            // Remove the number from the vector
            v.set(index, v.get(n - 1));
            v.remove(n - 1);
        
            // Return the removed number
            return num;
        }
        
        // Function to generate n
        // non-repeating random numbers
        static void generateRandom(int n)
        {
            //number of the name
            int name = 1;
          
            ArrayList<Integer> v = new ArrayList<>(n);
        
            // Fill the vector with the values
            // 1, 2, 3, ..., n
          
            for (int j = 0; j<2; j++) {
            for (int i = 0; i < n; i++)
                v.add(i + 1);
        
            // While vector has elements
            // get a random number from the vector and print it
            while (v.size() > 0)
            {
                System.out.print(name + " - " + getNum(v) + "\t");
              
                name = 1+name;
//                System.out.print(getNum(v)+ " ");
            }
          
          
            j = j+1;
            }
        }
    
        // Driver code
        public static void main(String []args)
        {
            
            int n = 9;
          
            System.out.println("Erste Ziehung");
            generateRandom(n);
            System.out.println("\n" + "Zweite Ziehung");
            generateRandom(n);
          
        }
    }
```



Und für die E-Mail:


```
import java.io.ObjectInputStream.GetField;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
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);

        // !!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.setHeader("Test", "Test");
            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 = "dstm11";
        String password = "";
        String senderAddress = "dstm11@web.de";//someone@web.de
        String recipientsAddress = "david-mutschler@web.de"; //somereceiver@web.de
        String subject = "Test";
        String text = "Hallo David, " + "\n" + "hier kommt ein Test." ;
        String smtpHost = "smtp.web.de";
      
        new SendMailExample().sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
    }
}
```



Habe noch zusätzlich die .jar Dateien javaxmail und Activation Framework hinzugefügt.

Bekomme bei der Code-Zeile

        Session session = Session.getDefaultInstance(properties, auth);

die Fehlermeldung:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The method getDefaultInstance(Properties, Authenticator) in the type Session is not applicable for the arguments (Properties, SendMailExample.MailAuthenticator)

    at SendMailExample.sendMail(SendMailExample.java:37)
    at SendMailExample.main(SendMailExample.java:117)

Habe am ursprünglichen Code nichts geändert außer in der Main-Methode meine Angaben inkl. Passwort eingetragen.

Kann mir eventuell jemand weiterhelfen wie ich das Problem voll lösen kann?

Vorab vielen Dank!
LG


----------



## vfl_freak (19. Oktober 2020)

erstens: was hat das den bite mit "E-Mail" zutun ??
zweitens: nutze bitte Code-Tags, sie sind nicht zum Spaß da!!
Gruß Klaus


----------



## DaveDarell (19. Oktober 2020)

zu erstens: ich kann damit keine E-Mail versenden? Daher hat das mMn schon was mit E-Mail zutun

zu zweitens: Wird gemacht


```
// Java implementation of the approach
    import java.util.*;
    import java.lang.Math;
     
    class GfG
    {
     
        // Function to return the next random number
        static int getNum(ArrayList<Integer> v)
        {
           

           
            // Size of the vector
            int n = v.size();
         
            // Make sure the number is within
            // the index range
            int index = (int)(Math.random() * n);
         
            // Get random number from the vector
            int num = v.get(index);
         
            // Remove the number from the vector
            v.set(index, v.get(n - 1));
            v.remove(n - 1);
         
            // Return the removed number
            return num;
        }
         
        // Function to generate n
        // non-repeating random numbers
        static void generateRandom(int n)
        {
            //number of the name
            int name = 1;
           
            ArrayList<Integer> v = new ArrayList<>(n);
         
            // Fill the vector with the values
            // 1, 2, 3, ..., n
           
            for (int j = 0; j<2; j++) {
            for (int i = 0; i < n; i++)
                v.add(i + 1);
         
            // While vector has elements
            // get a random number from the vector and print it
            while (v.size() > 0)
            {
                System.out.print(name + " - " + getNum(v) + "\t");
               
                name = 1+name;
//                System.out.print(getNum(v)+ " ");
            }
           
           
            j = j+1;
            }
        }
     
        // Driver code
        public static void main(String []args)
        {
             
            int n = 9;
           
            System.out.println("Erste Ziehung");
            generateRandom(n);
            System.out.println("\n" + "Zweite Ziehung");
            generateRandom(n);
           
        }
    }
```



```
import java.io.ObjectInputStream.GetField;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
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);

        // !!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.setHeader("Test", "Test");
            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 = "redacted";
        String password = "redacted";
        String senderAddress = "redacted@example.com";
        String recipientsAddress = "redacted@example.come";
        String subject = "Test";
        String text = "Hallo David, " + "\n" + "hier kommt ein Test." ;
        String smtpHost = "smtp.web.de";
       
        new SendMailExample().sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
    }
}
```


----------



## vfl_freak (19. Oktober 2020)

DaveDarell hat gesagt.:


> zu erstens: ich kann damit keine E-Mail versenden? Daher hat das mMn schon was mit E-Mail zutun


ok, hatte mir den unformatierten Code nicht näher angeschaut!


----------



## DaveDarell (20. Oktober 2020)

vfl_freak hat gesagt.:


> ok, hatte mir den unformatierten Code nicht näher angeschaut!


Okei  Kannst du mir dann weiterhelfen oder kennst du dich damit nicht aus? 

LG


----------



## kamil22 (28. Oktober 2020)

Hallo bin neu hier 

Können wir das benutzen, um einen Kommentarabschnitt in einer Seite zu machen?


----------



## DaveDarell (28. Oktober 2020)

kamil22 hat gesagt.:


> Hallo bin neu hier
> 
> Können wir das benutzen, um einen Kommentarabschnitt in einer Seite zu machen?


Verstehe nicht auf was du raus willst? 
Wo willst du einen Kommentarabschnitt machen?


----------



## kamil22 (28. Oktober 2020)

in einer Seite. Wenn also jemand einen Kommentar hinterlässt, muss er seine E-Mail-Adresse angeben und so weiter.


----------



## ComFreek (31. Oktober 2020)

DaveDarell hat gesagt.:


> Bekomme bei der Code-Zeile
> 
> Session session = Session.getDefaultInstance(properties, auth);
> 
> ...


Vielleicht war der Originalcode schon falsch?
Hast du dir den Sourcecode der Funktion getDefaultInstance mal angesehen? Was für Argumente erwartet sie? Hast du die API Doku der Bibliothek mal durchgeschaut?


----------



## -Pharao- (2. November 2020)

Du hast die falsche Authenticator-Klasse verwendet.
Ersetze

```
import java.net.Authenticator;
```
durch

```
import javax.mail.Authenticator
```


----------



## ComFreek (2. November 2020)

Ah, Klassiker beim Programmieren von Java- und Scala-Programmen


----------

