E-Mail (web.de) mit Java verschicken

DaveDarell

Grünschnabel
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:
 // 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:

Java:
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
 
Zuletzt bearbeitet:
erstens: was hat das den bite mit "E-Mail" zutun ??
zweitens: nutze bitte Code-Tags, sie sind nicht zum Spaß da!!
Gruß Klaus
 
zu erstens: ich kann damit keine E-Mail versenden? Daher hat das mMn schon was mit E-Mail zutun

zu zweitens: Wird gemacht

Java:
    // 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);
           
        }
    }


Java:
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);
    }
}
 
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)
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?
 
Du hast die falsche Authenticator-Klasse verwendet.
Ersetze
Java:
import java.net.Authenticator;
durch
Java:
import javax.mail.Authenticator
 
Zurück