Ich versuche eine E-Mail mit Java zu senden:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String [] args) {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Ich erhalte den Fehler:
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
nested exception is:java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
Funktioniert dieser Code zum Senden von E-Mails?
Antworten:
Der folgende Code funktioniert sehr gut mit dem Google SMTP-Server. Sie müssen Ihren Google-Nutzernamen und Ihr Passwort eingeben.
Update am 11. Dezember 2015
Benutzername + Passwort werden nicht mehr empfohlen. Das ist wegen
Google hatte die Google Mail-API https://developers.google.com/gmail/api/?hl=de veröffentlicht . Wir sollten die oAuth2-Methode anstelle von Benutzername + Passwort verwenden.
Hier ist das Code-Snippet für die Arbeit mit der Google Mail-API.
GoogleMail.java
Um einen autorisierten Google Mail-Dienst über oAuth2 zu erstellen, finden Sie hier das Code-Snippet.
Utils.java
Um eine benutzerfreundliche Möglichkeit der oAuth2-Authentifizierung bereitzustellen, habe ich JavaFX verwendet, um den folgenden Eingabedialog anzuzeigen
Der Schlüssel zum Anzeigen des benutzerfreundlichen oAuth2-Dialogfelds befindet sich in MyAuthorizationCodeInstalledApp.java und SimpleSwingBrowser.java
quelle
Send
statt aufgerufen werden,send
aber es ist eine nützliche Klasse. Irgendwelche Gedanken zu den Sicherheitsauswirkungen des Speicherns des Google Mail-Passworts im Code?Der folgende Code hat bei mir funktioniert.
quelle
Erforderliche JAR-Dateien
Klicken Sie hier - So fügen Sie externe Gläser hinzu
quelle
Die kurze Antwort - Nein.
Die lange Antwort - nein, da der Code auf dem Vorhandensein eines SMTP-Servers beruht, der auf dem lokalen Computer ausgeführt wird und Port 25 überwacht. Der SMTP-Server (technisch der MTA oder Mail Transfer Agent) ist für die Kommunikation mit dem Mail User Agent verantwortlich (MUA, in diesem Fall der Java-Prozess) zum Empfangen ausgehender E-Mails.
MTAs sind normalerweise für den Empfang von E-Mails von Benutzern für eine bestimmte Domäne verantwortlich. Für die Domain gmail.com sind es also die Google Mail-Server, die für die Authentifizierung der Mail-Benutzeragenten und damit für die Übertragung von Mails in Posteingänge auf den GMail-Servern verantwortlich sind. Ich bin nicht sicher, ob GMail offenen Mail-Relay-Servern vertraut, aber es ist sicherlich keine leichte Aufgabe, die Authentifizierung im Auftrag von Google durchzuführen und dann Mail an die GMail-Server weiterzuleiten.
Wenn Sie die JavaMail-FAQ zur Verwendung von JavaMail für den Zugriff auf GMail lesen , werden Sie feststellen, dass der Hostname und der Port zufällig auf die GMail-Server und sicherlich nicht auf localhost verweisen. Wenn Sie Ihren lokalen Computer verwenden möchten, müssen Sie entweder eine Weiterleitung oder eine Weiterleitung durchführen.
Sie müssen das SMTP-Protokoll wahrscheinlich gründlich verstehen, wenn Sie in Bezug auf SMTP irgendwohin gelangen möchten. Sie können mit dem Wikipedia-Artikel über SMTP beginnen , aber jeder weitere Fortschritt erfordert tatsächlich die Programmierung gegen einen SMTP-Server.
quelle
Sie benötigen einen SMTP-Server zum Senden von E-Mails. Es gibt Server, die Sie lokal auf Ihrem eigenen PC installieren können, oder Sie können einen der vielen Online-Server verwenden. Einer der bekannteren Server ist der von Google:
Ich habe gerade die zulässigen Google SMTP-Konfigurationen anhand des ersten Beispiels aus Simple Java Mail erfolgreich getestet :
Beachten Sie die verschiedenen Häfen und Transportstrategien (die alle für Sie erforderlichen Eigenschaften verwalten).
Seltsamerweise benötigt Google TLS auch für Port 25, obwohl die Anweisungen von Google etwas anderes aussagen .
quelle
Es ist schon eine Weile her, seit dies veröffentlicht wurde. Ab dem 13. November 2012 kann ich jedoch überprüfen, ob Port 465 noch funktioniert.
Lesen Sie die Antwort von GaryM in diesem Forum . Ich hoffe das hilft noch ein paar Leuten.
quelle
Der folgende Code funktioniert sehr gut. Versuchen Sie dies als Java-Anwendung mit javamail-1.4.5.jar
quelle
Nun, nein, nicht ohne einige Teile zu wechseln, da Sie eine Fehlermeldung erhalten. Sie versuchen derzeit, E-Mails über einen SMTP-Server zu senden, der auf localhost ausgeführt wird, aber Sie führen keine aus
ConnectException
.Angenommen, der Code ist in Ordnung (ich habe ihn nicht wirklich überprüft), müssen Sie entweder einen lokalen SMTP-Server ausführen oder einen (Remote-) Server (von Ihrem ISP) verwenden.
In Bezug auf den Code finden Sie Beispiele im JavaMail-Download-Paket, wie in den FAQ erwähnt :
quelle
Probieren Sie es aus. es funktioniert gut für mich. Stellen Sie sicher, dass Sie vor dem Senden einer E-Mail den Zugriff für eine weniger sichere App in Ihrem Google Mail-Konto gewähren müssen. Gehen Sie also zum folgenden Link und probieren Sie diesen Java-Code aus.
Aktivieren Sie Google Mail für eine weniger sichere App
Sie müssen die Datei javax.mail.jar und die Datei activity.jar in Ihr Projekt importieren.
Dies ist der vollständige Code zum Senden von E-Mails in Java
quelle
Hier ist die Arbeitslösung bro. Es ist garantiert.
[email protected]
Öffnen Sie diesen Link unten:
https://support.google.com/accounts/answer/6010255?hl=de
Hier ist mein Code:
quelle
Ich habe meine funktionierende Google Mail-Java-Klasse für Ihre Überprüfung auf Pastebin gestellt. Achten Sie besonders auf die Methode "startSessionWithTLS", und Sie können möglicherweise JavaMail anpassen, um dieselbe Funktionalität bereitzustellen. http://pastebin.com/VE8Mqkqp
quelle
Ihr Code funktioniert, abgesehen vom Einrichten der Verbindung mit dem SMTP-Server. Sie benötigen einen SMTP-Server (Running Mail), um E-Mails für Sie zu senden.
Hier ist Ihr geänderter Code. Ich habe die nicht benötigten Teile auskommentiert und die Sitzungserstellung so geändert, dass ein Authenticator erforderlich ist. Finden Sie jetzt einfach die SMPT_HOSTNAME, USERNAME und PASSWORD heraus, die Sie verwenden möchten (Ihr Internetprovider stellt sie normalerweise zur Verfügung).
Ich mache das immer so (mit einem mir bekannten Remote-SMTP-Server), weil das Ausführen eines lokalen Mailservers unter Windows nicht so trivial ist (unter Linux ist es anscheinend recht einfach).
quelle
In der Tat funktioniert 465, und die Ausnahme, die Sie erhalten, kann auf den nicht geöffneten SMTP-Port 25 zurückzuführen sein. Standardmäßig lautet die Portnummer 25. Sie können sie jedoch mithilfe des Mail-Agenten konfigurieren, der als Open Source verfügbar ist - Mercury
Verwenden Sie der Einfachheit halber einfach die folgende Konfiguration, und alles wird gut.
Für noch mehr: Schauen Sie sich hier das komplette Arbeitsbeispiel von Grund auf an
quelle
Ich habe die gleiche Ausnahme wie du. Grund dafür ist, dass auf Ihrem Computer kein SMTP-Server eingerichtet ist (da Ihr Host localhost ist). Wenn Sie Windows 7 verwenden, verfügt es nicht über einen SMTP-Server. Sie müssen also hmailserver als SMTP-Server verwenden, der auf meinem lokalen Computer installiert und konfiguriert ist. https://www.hmailserver.com/download
quelle
Eine vollständige und sehr einfache Java-Klasse zum Senden von E-Mails über ein Google-Konto (Google Mail) finden Sie hier.
Senden Sie E-Mails mit Java und Google-Konto
Es werden die folgenden Eigenschaften verwendet
quelle