Mir fehlen die richtigen Einstellungen um mich mit dem Konto zu verbinden. Kennt sich jemand aus mit der Art ?
lg Tom
lg Tom
Java:
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Properties;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.IOException;
import jakarta.mail.Authenticator;
import jakarta.mail.Message;
import jakarta.mail.MessagingException;
import jakarta.mail.PasswordAuthentication;
import jakarta.mail.Session;
import jakarta.mail.Transport;
import jakarta.mail.internet.InternetAddress;
import jakarta.mail.internet.MimeMessage;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class NeueNachricht extends JDialog {
// automatisch über Eclipse erzeugt
private static final long serialVersionUID = -5496318621928815910L;
// für die Eingabefelder
private JTextField empfaenger, betreff;
private JTextArea inhalt;
// für die Schaltflächen
private JButton ok, abbrechen;
// die innere Klasse für den ActionListener
class NeuListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
// wurde auf OK geklickt?
if (e.getActionCommand().equals("senden"))
// dann die Daten übernehmen
senden();
// wurde auf Abbrechen geklickt?
if (e.getActionCommand().equals("abbrechen"))
// dann Dialog schließen
dispose();
}
}
// der Konstruktor
public NeueNachricht(JFrame parent, boolean modal) {
super(parent, modal);
setTitle("Neue Nachricht");
// die Oberfläche erstellen
initGui();
// Standardoperation setzen
// hier den Dialog ausblenden und löschen
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}
private void initGui() {
setLayout(new BorderLayout());
JPanel oben = new JPanel();
oben.setLayout(new GridLayout(0, 2));
oben.add(new JLabel("Empfänger:"));
empfaenger = new JTextField();
oben.add(empfaenger);
oben.add(new JLabel("Betreff:"));
betreff = new JTextField();
oben.add(betreff);
add(oben, BorderLayout.NORTH);
inhalt = new JTextArea();
// den Zeilenumbruch aktivieren
inhalt.setLineWrap(true);
inhalt.setWrapStyleWord(true);
// das Feld setzen wir in ein Scrollpane
JScrollPane scroll = new JScrollPane(inhalt);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
add(scroll);
JPanel unten = new JPanel();
// die Schaltflächen
ok = new JButton("Senden");
ok.setActionCommand("senden");
abbrechen = new JButton("Abbrechen");
abbrechen.setActionCommand("abbrechen");
NeuListener listener = new NeuListener();
ok.addActionListener(listener);
abbrechen.addActionListener(listener);
unten.add(ok);
unten.add(abbrechen);
add(unten, BorderLayout.SOUTH);
// anzeigen
setSize(600, 300);
setVisible(true);
}
// die Methode verschickt die Nachricht
private void senden() {
// für die Sitzung
Session sitzung;
// die Verbindung herstellen
sitzung = verbindungHerstellen();
// die Nachricht verschicken und speichern
nachrichtVerschicken(sitzung);
nachrichtSpeichern();
}
private static Session verbindungHerstellen() {
// Pfad zur Konfigurationsdatei
String konfigurationsdatei = "src/config.txt";
// Eigenschaften-Objekt erstellen
Properties eigenschaften = new Properties();
try (InputStream input = new FileInputStream(konfigurationsdatei)) {
// Konfigurationsdatei laden
eigenschaften.load(input);
// Benutzernamen und Kennwort aus den Eigenschaften extrahieren
String benutzername = eigenschaften.getProperty("Benutzername");
String kennwort = eigenschaften.getProperty("Kennwort");
// Serveradresse aus den Eigenschaften extrahieren
String server = eigenschaften.getProperty("Server");
// die Eigenschaften setzen
eigenschaften.put("mail.smtp.auth", "true");
eigenschaften.put("mail.smtp.starttls.enable", "true");
eigenschaften.put("mail.smtp.host", server);
eigenschaften.put("mail.smtp.port", "587");
// das Session-Objekt erstellen
Session sitzung = Session.getInstance(eigenschaften, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(benutzername, kennwort);
}
});
return sitzung;
} catch (IOException e) {
// Behandlung der IOException
e.printStackTrace();
}
return null; // oder eine andere geeignete Rückgabewert, falls etwas schiefgeht
}
private void nachrichtVerschicken(Session sitzung) {
// der Absender
String absender = "schulekonto5@gmx.ch";
try {
// eine neue Nachricht vom Typ MimeMessage erzeugen
MimeMessage nachricht = new MimeMessage(sitzung);
// den Absender setzen
nachricht.setFrom(new InternetAddress(absender));
// den Empfänger
nachricht.setRecipients(Message.RecipientType.TO, InternetAddress.parse(empfaenger.getText()));
// den Betreff
nachricht.setSubject(betreff.getText());
// Originalnachricht abrufen
String originalText = inhalt.getText();
// Prüfen, ob es sich um eine Weiterleitung oder eine Antwort handelt
if (originalText.startsWith("WG:")) {
// Weiterleitung
nachricht.setText("----- Text der ursprünglichen Nachricht ----\n" + originalText);
} else if (originalText.startsWith("AW:")) {
// Antwort
// Empfängeradresse auf die des Absenders setzen
nachricht.setRecipients(Message.RecipientType.TO, InternetAddress.parse(absender));
// AW: vor den Betreff setzen
String neuerBetreff = "AW: " + betreff.getText();
nachricht.setSubject(neuerBetreff);
// Originalnachricht in den neuen Text einfügen
String neuerText = "----- Text der ursprünglichen Nachricht ----\n" + originalText + "\n\n";
// den neuen Text setzen
neuerText += inhalt.getText();
nachricht.setText(neuerText);
// die Nachricht verschicken
Transport.send(nachricht);
JOptionPane.showMessageDialog(this, "Die Nachricht wurde verschickt.");
// den Dialog schließen
dispose();
}
} catch (MessagingException e) {
JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
}
}
private void nachrichtSpeichern() {
// für die Verbindung
Connection verbindung;
// die Datenbank öffnen
verbindung = MiniDBTools.oeffnenDB("jdbc:derby:mailDB");
try {
// einen Eintrag in der Tabelle gesendet anlegen
// über ein vorbereitetes Statement
PreparedStatement prepState;
prepState = verbindung.prepareStatement("insert into gesendet (empfaenger, betreff, inhalt) values (?, ?, ?)");
prepState.setString(1, empfaenger.getText());
prepState.setString(2, betreff.getText());
prepState.setString(3, inhalt.getText());
// das Statement ausführen
prepState.executeUpdate();
verbindung.commit();
// Verbindung schließen
prepState.close();
verbindung.close();
// und die Datenbank schließen
MiniDBTools.schliessenDB("jdbc:derby:mailDB");
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
}
}
}