Laden Sie zuerst die JavaMail-API herunter und stellen Sie sicher, dass sich die relevanten JAR-Dateien in Ihrem Klassenpfad befinden.
Hier ist ein voll funktionsfähiges Beispiel mit GMail.
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
public class Main {
private static String USER_NAME = "*****"; // GMail user name (just the part before "@gmail.com")
private static String PASSWORD = "********"; // GMail password
private static String RECIPIENT = "[email protected]";
public static void main(String[] args) {
String from = USER_NAME;
String pass = PASSWORD;
String[] to = { RECIPIENT }; // list of recipient email addresses
String subject = "Java send mail example";
String body = "Welcome to JavaMail!";
sendFromGMail(from, pass, to, subject, body);
}
private static void sendFromGMail(String from, String pass, String[] to, String subject, String body) {
Properties props = System.getProperties();
String host = "smtp.gmail.com";
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(props);
MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(from));
InternetAddress[] toAddress = new InternetAddress[to.length];
// To get the array of addresses
for( int i = 0; i < to.length; i++ ) {
toAddress[i] = new InternetAddress(to[i]);
}
for( int i = 0; i < toAddress.length; i++) {
message.addRecipient(Message.RecipientType.TO, toAddress[i]);
}
message.setSubject(subject);
message.setText(body);
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch (AddressException ae) {
ae.printStackTrace();
}
catch (MessagingException me) {
me.printStackTrace();
}
}
}
Natürlich möchten Sie in den catch
Blöcken mehr tun , als den Stack-Trace zu drucken, wie ich es im obigen Beispielcode getan habe. (Entfernen Sie die catch
Blöcke, um zu sehen, welche Methodenaufrufe von der JavaMail-API Ausnahmen auslösen, damit Sie besser sehen können, wie sie richtig behandelt werden.)
Vielen Dank an @jodonnel und alle anderen, die geantwortet haben. Ich gebe ihm ein Kopfgeld, weil seine Antwort mich zu 95% zu einer vollständigen Antwort geführt hat.
smtp.gmail.com
. Weitere Informationen finden Sie unter Konfigurieren anderer E-Mail-Clients .javax.mail.AuthenticationFailedException
und musste "weniger sichere Apps" in meinen Google Mail-Einstellungen explizit aktivieren: google.com/settings/security/lesssecureapps . Sobald "weniger sichere Apps" aktiviert waren, funktionierte der CodeSo etwas (hört sich so an, als müssten Sie nur Ihren SMTP-Server ändern):
quelle
message.setText("Welcome to JavaMail");
mit dieser Zeile:message.setContent("<h1>Hello world</h1>", "text/html");
props.put("mail.smtp.starttls.enable", "true")
Andere Leute haben oben gute Antworten, aber ich wollte hier einen Hinweis auf meine Erfahrungen hinzufügen. Ich habe festgestellt, dass ich bei Verwendung von Google Mail als ausgehenden SMTP-Server für meine Webanwendung mit Google Mail nur etwa 10 Nachrichten senden kann, bevor ich mit einer Anti-Spam-Antwort antworte, die ich manuell durchlaufen muss, um den SMTP-Zugriff wieder zu aktivieren. Die E-Mails, die ich gesendet habe, waren kein Spam, sondern "Willkommens" -E-Mails der Website, als sich Benutzer bei meinem System registrierten. Also, YMMV und ich würden uns bei einer Produktions-Webanwendung nicht auf Google Mail verlassen. Wenn Sie E-Mails im Namen eines Benutzers senden, z. B. eine installierte Desktop-App (bei der der Benutzer seine eigenen Google Mail-Anmeldeinformationen eingibt), sind Sie möglicherweise in Ordnung.
Wenn Sie Spring verwenden, finden Sie hier eine funktionierende Konfiguration für die Verwendung von Google Mail für ausgehendes SMTP:
quelle
Obwohl diese Frage geschlossen ist, möchte ich eine Gegenlösung veröffentlichen, verwende aber jetzt Simple Java Mail (Open Source JavaMail SMTP-Wrapper):
quelle
new Mailer(your login / your session, TransportStrategy.SMTP_TLS).sendMail(email);
Mein vollständiger Code wie folgt funktioniert gut:
quelle
quelle
Das erforderliche Minimum:
quelle
Die veröffentlichten Code-Lösungen können Probleme verursachen, wenn Sie mehrere SMTP-Sitzungen an einer beliebigen Stelle innerhalb derselben JVM einrichten müssen.
In den JavaMail-FAQ wird die Verwendung empfohlen
anstatt
weil getDefault nur die Eigenschaften verwendet, die beim ersten Aufruf angegeben werden. Bei allen späteren Verwendungen der Standardinstanz werden Eigenschaftsänderungen ignoriert.
Siehe http://www.oracle.com/technetwork/java/faq-135477.html#getdefaultinstance
quelle
Dies ist, was ich mache, wenn ich E-Mail mit Anhang senden möchte, funktioniert gut. :) :)
quelle
Eine einfache Möglichkeit wäre, das Google Mail-Konto für den POP3-Zugriff zu konfigurieren / aktivieren. Auf diese Weise können Sie über normales SMTP über die Google Mail-Server senden.
Dann senden Sie einfach über smtp.gmail.com (auf Port 587)
quelle
Hallo versuche diesen Code ....
quelle
Hier ist eine benutzerfreundliche Klasse zum Senden von E-Mails mit
Gmail
. Sie müssen dieJavaMail
Bibliothek zu Ihrem Erstellungspfad hinzufügen oder einfach verwendenMaven
.Anwendungsbeispiel:
quelle
Wenn Sie Outlook mit
Javamail API
verwenden möchten, verwenden Sieals Host für mehr und vollständigen Arbeitscode Schauen Sie sich diese Antwort an .
quelle
Wert hinzugefügt:
Session.getInstance()
empfohlen überSession.getDefaultInstance()
quelle