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:

//Dateiname: SendEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendEmail { public static void main(String [] args) { //E-Mail-Adresse des Empfängers String to = "[email protected]"; //E-Mail-Adresse des Absenders String from = "[email protected]"; //Geben Sie den Host für den E-Mail-Versand als localhost an String host = "localhost"; //Systemeigenschaften abrufen Properties properties = System.getProperties(); //E-Mail-Server einrichten properties.setProperty("mail.smtp.host", host); //Standard-Session-Objekt abrufen Session session = Session.getDefaultInstance(properties); try{ //Ein Standard-MimeMessage-Objekt erstellen MimeMessage message = new MimeMessage(session); //From:-Header-Feld festlegen message.setFrom(new InternetAddress(from)); //To:-Header-Feld festlegen message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Subject:-Header-Feld festlegen message.setSubject("Dies ist die Betreffzeile!"); //Nachrichtentext festlegen message.setText("Dies ist die eigentliche Nachricht"); //Nachricht senden 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:

//Dateiname: SendHTMLEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendHTMLEmail { public static void main(String [] args) { //E-Mail-Adresse des Empfängers String to = "[email protected]"; //E-Mail-Adresse des Absenders String from = "[email protected]"; //Geben Sie den Host für den E-Mail-Versand als localhost an String host = "localhost"; //Systemeigenschaften abrufen Properties properties = System.getProperties(); //E-Mail-Server einrichten properties.setProperty("mail.smtp.host", host); //Standard-Session-Objekt abrufen. Session session = Session.getDefaultInstance(properties); try{ //Standard-MimeMessage-Objekt erstellen. MimeMessage message = new MimeMessage(session); //From:-Header-Feld festlegen message.setFrom(new InternetAddress(from)); //To:-Header-Feld festlegen message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Subject:-Header-Feld festlegen message.setSubject("Dies ist die Betreffzeile!"); //HTML-Nachricht senden; Sie können HTML-Tags einfügen message.setContent("<h1>Dies ist die eigentliche Nachricht</h1>", "text/html" ); //Nachricht senden 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:

//Dateiname: SendFileEmail.java import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendFileEmail { public static void main(String [] args) { //E-Mail-Adresse des Empfängers String to = "[email protected]"; //E-Mail-Adresse des Absenders String from = "[email protected]"; //Geben Sie den Host für den E-Mail-Versand als localhost an String host = "localhost"; //Systemeigenschaften abrufen Properties properties = System.getProperties(); //E-Mail-Server einrichten properties.setProperty("mail.smtp.host", host); //Standard-Session-Objekt abrufen. Session session = Session.getDefaultInstance(properties); try{ //Standard-MimeMessage-Objekt erstellen. MimeMessage message = new MimeMessage(session); //From:-Header-Feld festlegen message.setFrom(new InternetAddress(from)); //To:-Header-Feld festlegen message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Subject:-Header-Feld festlegen message.setSubject("Dies ist die Betreffzeile!"); //Nachrichtenteil erstellen BodyPart messageBodyPart = new MimeBodyPart(); //Message messageBodyPart.setText("Dies ist der Nachrichtentext"); //Eine mehrteilige Nachricht erstellen Multipart multipart = new MimeMultipart(); //Textnachrichtenteil festlegen multipart.addBodyPart(messageBodyPart); //Anhangteil messageBodyPart = new MimeBodyPart(); String filename = "file.txt"; DataSource source = new FileDataSource(filename); messageBodyPart.setDataHandler(new DataHandler(source)); messageBodyPart.setFileName(filename); multipart.addBodyPart(messageBodyPart); //Die vollständige Nachricht senden message.setContent(multipart ); //Nachricht senden 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:

//Beispiel für E-Mail-Versand, der Benutzername und Passwort erfordert //Dateiname: SendEmail2.java //Dieses Beispiel verwendet das QQ-Postfach als Beispiel; Sie müssen es im QQ-Backend einrichten. 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) { //E-Mail-Adresse des Empfängers String to = "[email protected]"; //E-Mail-Adresse des Absenders String from = "[email protected]"; //Geben Sie den Host für den E-Mail-Versand als smtp.qq.com an String host = "smtp.qq.com"; //QQ-Mailserver //Systemeigenschaften abrufen Properties properties = System.getProperties(); //Mailserver einrichten properties.setProperty("mail.smtp.host", host); properties.put("mail.smtp.auth", "true"); //Das standardmäßige Session-Objekt abrufen Session session = Session.getDefaultInstance(properties,new Authenticator(){ public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("[email protected]", "QQ-Postfach-Autorisierungscode"); //Benutzername und Autorisierungscode der Absender-E-Mail } }); try{ //Ein standardmäßiges MimeMessage-Objekt erstellen MimeMessage message = new MimeMessage(session); //From:-Header-Feld setzen message.setFrom(new InternetAddress(from)); //To:-Header-Feld festlegen message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); //Subject:-Header-Feld festlegen message.setSubject("Dies ist die Betreffzeile!"); //Nachrichtentext festlegen message.setText("Dies ist die eigentliche Nachricht"); //Nachricht senden Transport.send(message); System.out.println("Nachricht erfolgreich gesendet....von example.com"); }catch (MessagingException mex) { mex.printStackTrace(); } } }
Andere Erweiterungen