Java- "Verbindungsaufbau abgelehnt"?
Hallo, hier der Code erstmal :
package EmailSending;
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail555
{
public static void main(String [] args){
String to = "z";//change accordingly
String from = "y"; //change accordingly
String host = "x";//or IP address
//Get the session object
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
//compose the message
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
message.setSubject("Ping");
message.setText("Hello, this is example of sending email ");
// Send message
Transport.send(message);
System.out.println("message sent successfully....");
}catch (MessagingException mex) {mex.printStackTrace();}
}
}
Und dann kommt diese Fehlermeldung :
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: xyz; timeout -1;
nested exception is:
java.net.ConnectException: Verbindungsaufbau abgelehnt
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
at javax.mail.Service.connect(Service.java:366)
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 EmailSending.SendEmail555.main(SendEmail555.java:29)
Caused by: java.net.ConnectException: Verbindungsaufbau abgelehnt
at java.base/sun.nio.ch.Net.connect0(Native Method)
at java.base/sun.nio.ch.Net.connect(Net.java:579)
at java.base/sun.nio.ch.Net.connect(Net.java:568)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:633)
at java.base/java.net.Socket.connect(Socket.java:583)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:359)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175)
... 7 more
Was habe ich falsch gemacht ? Immer kommt dieser Fehler, der Verbindungsaufbau würde abgelehnt werden...
2 Antworten
Demzufolge kann keine Verbindung zu einen SMTP-Server hergestellt werden, der deine Nachricht erst verschicken würde. Direkt fällt mir bei deinem Code bereits auf, dass eine Portangabe fehlt.
Du könntest einen Mail Provider wie GMail für den Versand nutzen. Dafür müsstest du natürlich einen GMail Account haben und dich somit authentifizieren können.
Properties settings = new Properties();
settings.put("mail.smtp.host", "smtp.gmail.com");
settings.put("mail.smtp.port", "587");
settings.put("mail.smtp.auth", "true");
settings.put("mail.smtp.starttls.enable", "true");
Session session = Session.getInstance(settings, new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("your account username", "your account password");
}
});
// etc. ...
Die Absendeadresse (from) sollte deiner GMail-Adresse entsprechen.
Für einen Versand via SSL bräuchtest du ein App-Passwort, wenn dein GMail-Account durch eine 2FA gesichert ist. Zusätzlich würde der Port 465 verwendet werden und statt TLS kämen folgende zwei Einträge in das Properties-Objekt:
settings.put("mail.smtp.socketFactory.port", "465");
settings.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
Das ist der Nutzername deines GMail-Accounts, mit dem du dich im Browser auch anmelden würdest, um auf das Postfach zugreifen zu können.
Verstehst du überhaupt, was da passiert bzw. gemacht wird? Nur weil du was aus dem Internet kopiert hast, heisst das noch längst nicht, dass das in deinem Code einfach so magisch funktioniert, sieht nämlich sehr danach aus.
String host = "x";//or IP address
"x" ist kein Hostname, sicherlich keiner, der in deinem Netzwerk vorhanden ist. Du musst hier also einen gültigen SMTP-Server angeben.
Dasselbe mit to und from, das sollten E-Mail-Adressen sein.
Achso, okay. Läuft denn auf dem Localhost auch ein SMTP-Server?
Ein SMTP Server ist in erster Linie nur zum Ausliefern der Mails da. Wenn du nicht, weisst, ob einer drauf ist, dann wird da auch keiner sein. So einer ist nicht standardmässig installiert.
Der SMTP-Server ist essentiell. Er definiert den Mailtransport. Zuzüglich übernimmt er Validationen und Datenfilterung.
Es gibt diverse Lösungen für eine lokale Installation: Papercut, hMailServer, XMail, ... Installations-/Konfigurationsanleitungen solltest du auf deren offiziellen Webseiten finden. Andernfalls kannst du auch einen Provider wie GMail, GMX, o.ä. nutzen. Du musst dich allerdings zuvor darüber informieren, welche Einstellungen notwendig sind (Port, Host, TLS/SSL, evt. ist noch eine Aktivierung von POP3/IMAP im E-Mail-Account notwendig, ...).
Der Domainname localhost benennt den eigenen, lokalen Rechner. Eine E-Mail ist eine elektronische Nachricht bzw. das System für Verwaltung/Transport von elektronischen Nachrichten. Wenn du eine Nachricht erstellst (also im Grunde erst einmal nur die Daten, die die E-Mail später beschreiben sollen: Absender, Nachricht, Betreff, etc.) und sie an localhost:<IrgendeinPort> schickst, muss es auf deinem Rechner ein Programm geben (genauer: Einen SMTP-Server), welches auf Nachrichten über diese Adresse / diesen Port lauscht. Wurde die Nachricht erst empfangen, wird sie unter Achtung des SMTP-Protokolls verpackt (man könnte hier auch von dem Briefumschlag reden) und schließlich versandt.
Ich hab das manuell geändert, da ich weder email Empfänger noch Sender Adresse offenbaren will.
Danke, aber was meinst du mit “username”? Ist das meine Email?