Java-E-Mail-Versand
Das Senden von E-Mails mit einer Java-Anwendung ist sehr einfach, aber zuerst sollten Sie die JavaMail-API und das Java Activation Framework (JAF) auf Ihrem Rechner installieren.
- Sie können die neueste Version von der Java-Website herunterladen:JavaMail, öffnen Sie die Webseite, und auf der rechten Seite befindet sich einDownloads-Link, klicken Sie darauf, um herunterzuladen.
- Sie können die neueste Version von der Java-Website herunterladen:JAF (Version 1.1.1)。
Sie können auch den von dieser Website bereitgestellten Download-Link verwenden:
-
JavaMail mail.jar 1.4.5
-
-
JAF (Version 1.1.1) activation.jar
-
Laden Sie diese Dateien herunter und entpacken Sie sie. Im neu erstellten Top-Level-Verzeichnis finden Sie einige jar-Dateien für diese beiden Anwendungen. Sie müssen diemail.jarundactivation.jar-Dateien in Ihren CLASSPATH legen.
Wenn Sie einen E-Mail-Server eines Drittanbieters wie den SMTP-Server von QQ verwenden, können Sie sich das vollständige Beispiel zur Benutzerauthentifizierung am Ende des Artikels ansehen.
Eine einfache E-Mail senden
Unten sehen Sie ein Beispiel für das Senden einer einfachen E-Mail. Gehen Sie davon aus, dass Ihr lokaler Host bereits mit dem Netzwerk verbunden ist.
Code der Datei SendEmail.java:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Dies ist die Betreffzeile!");
message.setText("Dies ist die eigentliche Nachricht");
Transport.send(message);
System.out.println("Nachricht erfolgreich gesendet....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Kompilieren und führen Sie dieses Programm aus, um eine einfache E-Mail zu senden:
$ java SendEmail
Sent message successfully....
Wenn Sie eine E-Mail an mehrere Empfänger senden möchten, verwenden Sie die folgenden Methoden, um mehrere Empfänger-IDs anzugeben:
void addRecipients(Message.RecipientType type,
Address[] addresses)
throws MessagingException
Das Folgende ist eine Beschreibung der Parameter:
type:Muss auf TO, CC oder BCC gesetzt werden, wobei CC für Carbon Copy und BCC für Blind Carbon Copy steht. Beispiel:Message.RecipientType.TO
addresses:Dies ist ein Array von E-Mail-IDs. Beim Angeben von E-Mail-IDs müssen Sie die Methode InternetAddress() verwenden.
Eine HTML-E-Mail senden
Nachfolgend sehen Sie ein Beispiel für das Senden einer HTML-E-Mail. Gehen Sie davon aus, dass Ihr lokaler Host bereits mit dem Netzwerk verbunden ist.
Es ist dem vorherigen Beispiel sehr ähnlich, außer dass wir die Methode setContent() verwenden, wobei der zweite Parameter "text/html" ist, um den Inhalt festzulegen und anzugeben, dass HTML-Inhalt gesendet werden soll.
Code der Datei SendHTMLEmail.java:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendHTMLEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Dies ist die Betreffzeile!");
message.setContent("<h1>Dies ist die eigentliche Nachricht</h1>",
"text/html" );
Transport.send(message);
System.out.println("Nachricht erfolgreich gesendet....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Kompilieren und führen Sie dieses Programm aus, um eine HTML-E-Mail zu senden:
$ java SendHTMLEmail
Sent message successfully....
E-Mail mit Anhängen senden
Nachfolgend finden Sie ein Beispiel für das Senden einer E-Mail mit Anhängen. Gehen Sie davon aus, dass Ihr lokaler Host bereits mit dem Netzwerk verbunden ist.
SendFileEmail.java Dateicode:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendFileEmail
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "localhost";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
Session session = Session.getDefaultInstance(properties);
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Dies ist die Betreffzeile!");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Dies ist der Nachrichtentext");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
messageBodyPart = new MimeBodyPart();
String filename = "file.txt";
DataSource source = new FileDataSource(filename);
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName(filename);
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart );
Transport.send(message);
System.out.println("Nachricht erfolgreich gesendet....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Kompilieren und führen Sie Ihr Programm aus, um eine E-Mail mit Anhängen zu senden.
$ java SendFileEmail
Sent message successfully....
Abschnitt zur Benutzerauthentifizierung
Wenn Sie für die Benutzerauthentifizierung einen Benutzernamen und ein Passwort für den E-Mail-Server angeben müssen, können Sie dies mit den folgenden Einstellungen tun:
props.put("mail.smtp.auth", "true");
props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");
Der Rest des E-Mail-Versandmechanismus bleibt wie oben.
Beispiel für E-Mail-Versand mit Benutzername/Passwort-Authentifizierung:
Dieses Beispiel verwendet den QQ-Mailserver als Beispiel. Sie müssen sich im Backend Ihrer QQ-Mailbox anmelden und den POP3/SMTP-Dienst unter "Einstellungen" => "Konten" aktivieren, wie in der folgenden Abbildung gezeigt:

Die QQ-Mailbox setzt das Passwort durch Erzeugen eines Autorisierungscodes:

Der Java-Code lautet wie folgt:
Code der Datei SendEmail2.java:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class SendEmail2
{
public static void main(String [] args)
{
String to = "[email protected]";
String from = "[email protected]";
String host = "smtp.qq.com";
Properties properties = System.getProperties();
properties.setProperty("mail.smtp.host", host);
properties.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(properties,new Authenticator(){
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("[email protected]", "QQ-Postfach-Autorisierungscode");
}
});
try{
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject("Dies ist die Betreffzeile!");
message.setText("Dies ist die eigentliche Nachricht");
Transport.send(message);
System.out.println("Nachricht erfolgreich gesendet....von example.com");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Andere Erweiterungen