Überblick
1. E-Mail-bezogene Standards
Die von Herstellern bereitgestellten Javamail -Serviceprogramme können bestimmte E -Mail -Protokolle selektiv implementieren. Zu den allgemeinen Mail -Protokollen gehören:
SMTP (Simple Mail Transfer Protocol) ist ein einfaches E -Mail -Transfer -Protokoll. Es handelt sich um eine Reihe von Regeln für die Übertragung von E -Mails aus der Quelladresse an die Zieladresse. Es steuert die Transitmethode von Buchstaben.
POP3 (Postprotokollversion 3): Es handelt sich um ein Standardprotokoll, das zum Empfangen von E -Mails verwendet wird.
IMAP (Internet -Mail -Zugriffsprotokoll): Das heißt, das Internet -Mail -Zugriffsprotokoll. Es ist ein alternatives Protokoll für POP3.
Diese drei Protokolle haben Protokolle, die der SSL -verschlüsselten Übertragung entsprechen, nämlich SMTPs, POP3s und IMAPs.
MIME (Mehrzweck -Internet -Mail -Erweiterungen): Das heißt, der Mehrzweck -Internet -Mail -Erweiterungsstandard. Es ist kein Postübertragungsprotokoll. Das Format ist jedoch für Nachrichten, Anhänge und andere Inhalte definiert, die übertragen werden.
2. Einführung in Javamail
Javamail ist eine API, die von Sun veröffentlicht wurde, um E -Mails zu bearbeiten. Es ist nicht in Java SE enthalten, sondern Teil von Java EE.
Mail.jar: Diese JAR-Datei enthält die Javamail-API und die von Sun bereitgestellte SMTP-, IMAP- und POP3-Dienstanbieter.
actionation.jar: Diese JAR -Datei enthält Implementierungen der JAF -API und Sun.
Die Kernklassen, die in Javamail -Paketen zur Verarbeitung von E -Mails verwendet werden, sind: Eigenschaften, Sitzung, Nachricht, Adresse, Authentikatoren, Transport, Speicher usw.
3. E -Mail -Übertragungsprozess
Wie im obigen Bild gezeigt, sind die Schritte zur Verarbeitung von E -Mails wie folgt:
4. Nachrichtenstruktur
Mimemessage -Klasse: Repräsentiert die gesamte E -Mail.
Mimebodypart -Klasse: Eine MIME -Nachricht, die die Nachricht darstellt.
MIMEMULTIPART -Klasse: stellt eine kombinierte MIME -Informationen dar, die aus mehreren MIME -Informationen besteht.
5. Die Kernklasse von Javamail
JavaMail bietet eine hochrangige Abstraktion beim Senden und Empfangen von E-Mails und bildet einige wichtige Schnittstellen und Klassen, die die Grundlage des Programms bilden. Schauen wir uns diese häufigsten Objekte an.
6. Java.util.Properties Klasse (Eigenschaftsobjekt)
Die Klasse von Java.util.Properties repräsentiert eine Reihe von Eigenschaften.
Jeder seiner Schlüssel und Werte ist vom Typ String.
Da Javamail mit dem Mailserver kommunizieren muss, muss das Programm viele Informationen wie Serveradresse, Port, Benutzername, Kennwort usw. bereitstellen.
Beispiel: Zum Beispiel fasst der folgende Code mehrere Attributinformationen zusammen:
Eigenschaften prop = neue Eigenschaften (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.host", "[E -Mail geschützt]"); prop.setProperty ("mail.transport.Protocol", "SMTP");Bei verschiedenen Mail -Protokollen muss Javamail feststellen, dass Dienstleister eine Reihe von Attributen unterstützen müssen.
Die folgende Tabelle ist einige gängige Attribute (die Attributwerte werden als Zeichenfolge -Typ festgelegt, und die Attributtypleiste gibt nur an, wie die Attribute analysiert werden):
7. Javax.Mail.Session Class (Sitzungsobjekt)
Die Sitzung stellt eine Mail -Sitzung dar.
Die Hauptfunktionen der Sitzung umfassen zwei Aspekte:
Empfangen Sie verschiedene Konfigurationsattributinformationen: Attributinformationen, die über das Eigenschaftenobjekt festgelegt sind;
Initialisieren Sie die Javamail -Umgebung: Initialisieren Sie die Javamail -Umgebung gemäß der Javamail -Konfigurationsdatei, um Instanzen anderer wichtiger Klassen über das Sitzungsobjekt zu erstellen.
JavaMail bietet grundlegende Konfigurationsinformationen über die folgenden Dateien im Meta-Inf-Verzeichnis des JAR-Pakets, damit die Sitzung der Implementierungsklasse des Anbieters gemäß dieser Konfigurationsdatei geladen werden kann:
Javamail.Default.Providers;
javamail.default.address.map.
Beispiel:
Properties props = new Properties (); props.setProperty ("mail.transport.protocol", "SMTP"); Sitzung Session = Session.getInstance (Props);8. javax.mail.transportklasse (Mailübertragung)
Es gibt nur zwei Möglichkeiten, E -Mail -Operationen zu verarbeiten: Senden oder Empfangen.
JavaMail beschreibt diese beiden verschiedenen Operationen als Übertragung (javax.mail.transport) und speicher (javax.mail.store), übermittelt das Senden der entsprechenden Mail und speichert das Empfangen der entsprechenden E -Mails.
GetTransport: GetTransport () in der Sitzungsklasse verfügt über mehrere überlastete Methoden, mit denen Transportobjekte erstellt werden können.
Verbindung: Wenn der Authentifizierungsbefehl - mail.smtp.Auth festgelegt ist, muss der Benutzername und das Kennwort hinzugefügt werden, wenn Sie eine Verbindung zum Server mit der Verbindungsmethode der Transportklasse herstellen.
SENDMESSAGE: Die SendMessage -Methode der Transportklasse wird zum Senden von Mail -Nachrichten verwendet.
Schließen: Die schließende Methode der Transportklasse wird verwendet, um die Verbindung zum Mailserver zu schließen.
9. javax.mail.store Klasse (Mailspeicher)
GetStore: GetStore () in der Sitzungsklasse verfügt über mehrere überladene Methoden, mit denen Speicherobjekte erstellt werden können.
Verbindung: Wenn der Authentifizierungsbefehl - mail.smtp.Auth festgelegt ist, muss der Benutzername und das Kennwort hinzugefügt werden, wenn Sie eine Verbindung zum Server mit der Verbindungsmethode der Store -Klasse herstellen.
GETFOLDER: Die GetFolder -Methode der Store -Klasse kann das Ordnerordnerobjekt in der Mailbox abrufen.
Schließen: Die schließende Methode der Store -Klasse wird verwendet, um die Verbindung zum Mailserver zu schließen.
10. javax.mail.message (Nachrichtenobjekt)
javax.mail.message ist eine abstrakte Klasse, die nur durch Unterklassen instanziiert werden kann, und in den meisten Fällen handelt es sich um javax.mail.internet.mimemessage.
Mimemessage repräsentiert eine E -Mail -Nachricht vom MIME -Typ.
Um eine Nachricht zu erstellen, müssen Sie das Sitzungsobjekt an den Mimemessage -Konstruktor übergeben:
Mimemessage message = new Mimemessage (Sitzung);
Hinweis: Es gibt andere Konstruktoren, z. B. die Verwendung von Eingabestreams im RFC822 -Format zum Erstellen von Nachrichten.
SETFROM: Setzen Sie den Absender der E -Mail
setRecipient: Stellen Sie die Absender, die CC -Person und die geheime Person der E -Mail fest
Die drei vordefinierten Adresstypen sind:
Message.RecipientType.to: Empfänger
Message.RecipientType.cc: CC -Person
Message.RecipientType.bcc: Geben Sie heimlich weg
setSubject: Setzen Sie das Thema der E -Mail
SetContent: Setzen Sie den E -Mail -Inhalt fest
SETTEXT: Wenn der E -Mail -Inhalt nur Text ist, können Sie mit dieser Schnittstelle den Textinhalt festlegen.
10. javax.mail.address (Adresse)
Sobald Sie Sitzung und Nachricht erstellt und die Nachricht ausgefüllt haben, können Sie die Adresse verwenden, um die E -Mail -Adresse zu bestimmen. Wie die Nachricht ist auch die Adresse eine abstrakte Klasse. Sie verwenden die Klasse javax.mail.internet.InternetAddress.
Wenn die erstellte Adresse nur eine E -Mail -Adresse enthält, geben Sie einfach die E -Mail -Adresse an den Konstruktor weiter.
Beispiel:
Adresse Adresse = neuer InternetAddress ("[E -Mail geschützt]");
Authentikator: zertifiziert
Wie in der Java.net -Klasse kann auch die Javamail -API Authenticator verwenden, um über Benutzername und Kennwort geschützte Ressourcen zuzugreifen. Für die Javamail -API sind diese Ressourcen Mail -Server. Javamail Authenticator befindet sich im Paket von Javax.mail und unterscheidet sich vom Klassenauthentikator mit demselben Namen in Java.net. Die beiden teilen nicht denselben Authentikator, da die Javamail -API für Java 1.1 verwendet wird und die Kategorie von Java.net nicht hat.
Um Authenticator zu verwenden, erstellen Sie zunächst eine Unterklasse der abstrakten Klasse und senden Sie eine PasswortAuthentication -Instanz aus der Methode GetPasswordAuthentication () zurück. Nach Abschluss der Erstellung müssen Sie den Authentikator bei der Sitzung registrieren. Wenn dann eine Authentifizierung erforderlich ist, wird der Authentikator benachrichtigt. Sie können Windows übertreffen oder Benutzernamen und Kennwörter aus einer Konfigurationsdatei lesen (obwohl es nicht sicher ist, nicht zu verschlüsseln) und sie als PasswordAuthentication -Objekte an das aufrufende Programm zurückgeben.
Beispiel:
Properties props = new Properties (); Authenticator Auth = new MyAuthenticator (); Sitzung Session = Session.getDefaultInstance (Props, Auth);
Beispiel
Senden Sie SEXT -E -Mails
public static void main (String [] args) löst Ausnahme aus {Eigenschaften prop = neue Eigenschaften (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.host", mail_server_host); prop.setProperty ("mail.transport.protocol", "SMTP"); prop.setProperty ("mail.smtp.auth", "true"); // 1. Session Session Session = Session.getInstance (Prop) erstellen; Transport ts = null; // 2. Holen Sie sich das Transportobjekt über Session ts = session.getTransport (); // 3.. Verbindung zum Mailserver Ts.Connect (mail_server_host, Benutzer, Passwort); // 4. Erstellen Sie eine Nachricht mimemessage message = new Mimemessage (Sitzung); // E -Mail -Nachrichten Header Message.setFrom (neue InternetDress (mail_from)); // Absender der message.setRecipient (message.RecipientType.to, New InternetAddress (mail_to)); // Der Empfänger der E -Mail -Nachricht.setRecipient (message.RecipientType.cc, New InternetAddress (Mail_CC)); // die cc message.setRecipient (message.RecipientType.bcc, New InternetAddress (mail_bcc)); // Die Nachrichtendersage meldung.setsubject ("Testtext mail"); // Der Titel der E -Mail // Die Nachricht meldung.setText ("beispiellose in der Welt"); // 5. Mail ts.sendMessage senden (message, message.getAllrecipients ()); ts.close ();}Senden Sie HTML-formatierte E-Mails
public static void main (String [] args) löst Ausnahme aus {Eigenschaften prop = neue Eigenschaften (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.host", mail_server_host); prop.setProperty ("mail.transport.protocol", "SMTP"); prop.setProperty ("mail.smtp.auth", "true"); // 1. Session Session Session = Session.getInstance (Prop) erstellen; Transport ts = null; // 2. Holen Sie sich das Transportobjekt über Session ts = session.getTransport (); // 3.. Verbindung zum Mailserver Ts.Connect (mail_server_host, Benutzer, Passwort); // 4. Erstellen Sie eine Nachricht mimemessage message = new Mimemessage (Sitzung); // E -Mail -Nachrichten Header Message.setFrom (neue InternetDress (mail_from)); // Absender der message.setRecipient (message.RecipientType.to, New InternetAddress (mail_to)); // Der Empfänger der E -Mail -Nachricht.setRecipient (message.RecipientType.cc, New InternetAddress (Mail_CC)); // die cc message.setRecipient (message.RecipientType.bcc, New InternetAddress (mail_bcc)); // Der Empfänger der E -Mail -Nachricht. // Der Titel der E -Mail -Zeichenfolge htmlContent = "<h1> Hallo </h1>" + "<P> Zeigen Sie das Bild <img src = 'cid: abc.jpg'> 1.jpg </p>"; Mimebodypart text = neu mimebodypart (); text.setContent (htmlContent, "text/html; charSet = utf-8"); Mimebodypart image = new mimebodypart (); Datahandler dh = neuer datahandler (neuer fileedataSource ("d: // [04] temp // img // 1.jpg"); Image.SetDatahandler (DH); Image.SetContentID ("abc.jpg"); // Beschreiben Sie die Datenbeziehung mimemultiPart mm = new mimemultipart (); mm.addbodypart (Text); mm.addbodypart (Bild); mm.setsuBype ("verwandt"); Message.SetContent (MM); Message.Savechanges (); // 5. Mail ts.sendMessage senden (message, message.getAllrecipients ()); ts.close ();}Senden Sie E -Mails mit Anhängen
public static void main (String [] args) löst Ausnahme aus {Eigenschaften prop = neue Eigenschaften (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.host", mail_server_host); prop.setProperty ("mail.transport.protocol", "SMTP"); prop.setProperty ("mail.smtp.auth", "true"); // 1. Session Session Session = Session.getInstance (Prop) erstellen; Transport ts = null; // 2. Holen Sie sich das Transportobjekt über Session ts = session.getTransport (); // 3.. Verbindung zum Mailserver Ts.Connect (mail_server_host, Benutzer, Passwort); // 4. Erstellen Sie eine Nachricht mimemessage message = new Mimemessage (Sitzung); // E -Mail -Nachrichten Header Message.setFrom (neue InternetDress (mail_from)); // Absender der message.setRecipient (message.RecipientType.to, New InternetAddress (mail_to)); // Der Empfänger der E -Mail -Nachricht.setRecipient (message.RecipientType.cc, New InternetAddress (Mail_CC)); // die cc message.setRecipient (message.RecipientType.bcc, New InternetAddress (mail_bcc)); // Der Empfänger der E -Mail -Nachricht. // Der Titel der E -Mail Mimebodypart text = new mimebodypart (); text.setContent ("Es gibt zwei Anhänge in der E-Mail.", "Text/html; CharSet = utf-8"); // Beschreiben Sie die Datenbeziehung mimemultiPart mm = new mimemultipart (); mm.setsuBype ("verwandt"); mm.addbodypart (Text); String [] files = {"d: // [04] temp // img // 1.jpg", "d: // [04] temp // img // 2.jpg"}; // Fügen Sie einen E -Mail -Anhang für (String -Dateiname: Dateien) {mimebodyPart catteinpart = new Mimebodypart () hinzu; AttemPart.attachFile (Dateiname); mm.addbodypart (AttemPart); } message.setContent (mm); Message.Savechanges (); // 5. Mail ts.sendMessage senden (message, message.getAllrecipients ()); ts.close ();}Holen Sie sich E -Mails in Ihrem Mailbox
public class storemail {endgültige statische String user = "Robot"; // Benutzername endgültig statische String -Passwort = "Passwort520"; // Passwort Public Final Static String mail_server_host = "mail. ***. Com"; // Mailbox Server Public Final Static String type_html = "text/html; charSet = utf-8"; // Textinhaltstyp Public Final Static String mail_from = "[E -Mail geschützt]"; // Absender Public Final Static String mail_to = "[E -Mail geschützt]"; // an den Empfänger Public Final Static String mail_cc = "[E -Mail geschützt]"; // CC Person Public Final Static String mail_bcc = "[E -Mail geschützt]"; // Senden Sie heimlich die öffentliche statische void main (String [] args) Ausnahme {// Erstellen Sie ein Eigenschaftenobjekt mit spezifischen Verbindungsinformationen prop = new Properties (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.store.protocol", "pop3"); prop.setProperty ("mail.pop3.host", mail_server_host); // 1. Erstellen von Sitzungssitzung Sitzung Session = Session.getInstance (Prop); // 2. Holen Sie sich das Store -Objekt über Session Store Store = Session.getStore (); // 3.. Verbindung zum Mail Server Store.Connect (mail_server_host, Benutzer, Passwort); // 4. Holen Sie sich den Mail -Ordner im Mailboxordner order = store.getFolder ("Posteingang"); order.open (order.read_only); // Alle Nachrichten in die Ordner Nachrichtenobjekte Message [] message = order.getMessages () abrufen; für (int i = 0; i <message.length; i ++) {String subjekt = messages [i] .GetSubject (); String from = (message [i] .getfrom () [0]). ToString (); System.out.println ("Th" + (i + 1) + "Das Thema der Nachricht:" + Betreff); System.out.println ("Th" + (i + 1) + "Die Absenderadresse der E -Mail:" + von); } // 5. Ordner schließen.CLOSE (FALSE); store.close (); }}E -Mail weiterleiten
Beispiel: Holen Sie sich die erste E -Mail unter dem angegebenen Mailordner und leiten Sie sie weiter
public static void main (String [] args) löst Ausnahme aus {Eigenschaften prop = neue Eigenschaften (); prop.put ("mail.store.protocol", "pop3"); prop.put ("mail.pop3.host", mail_server_host); prop.put ("mail.pop3.StartTls.enable", "true"); prop.put ("mail.smtp.auth", "true"); prop.put ("mail.smtp.host", mail_server_host); // 1. Session Session Session = Session.getDefaultInstance (Prop) erstellen; // 2. Lesen Sie den Mail Ordner Store Store = Session.getStore ("pop3"); store.connect (mail_server_host, user, password); Ordner order = store.getFolder ("Posteingang"); order.open (order.read_only); // Erhalten Sie die erste E -Mail -Nachricht in der Mail -Ordnernachricht [] message = order.getMessages (); if (messages.length <= 0) {return; } Message message = messus [0]; // Schlüsselmeldungszeichenfolge von = internetAddress.toString (message.getfrom ()) drucken; if (von! = null) {System.out.println ("von:" + von); } String ReplyTo = InternetAddress.ToString (message.getRepryto ()); if (ReplyTo! = null) {System.out.println ("Reply-to:" + ReplyTo); } String to = InternetAddress.toString (message.getRecipients (message.RecipientType.to)); if (zu! = null) {System.out.println ("bis:" + zu); } String -Subjekt = message.getSubject (); if (Betreff! = null) {System.out.println ("Subjekt:" + Subjekt); } Date sent = message.getSentDate (); if (gesendet! = null) {System.out.println ("gesendet:" + gesendet); } // Legen Sie die E -Mail -Nachrichten -Header -Nachricht vor. vorwärts.setFrom (neue InternetAddress (mail_from)); stürmisch.setRecipient (Message.RecipientType.to, New InternetAddress (mail_to)); vorwärts.setsubject ("fwd:" + message.getSubject ()); // E -Mail -Inhalte mimebodypart bodypart = new mimebodypart () vorlegen; bodypart.setContent (message, "message/rfc822"); Multipart Multipart = new MimemultiPart (); Multipart.Addbodypart (Bodypart); vorwärts.setContent (Mehrpartikel); vorwärts.savechanges (); Transport ts = session.getTransport ("SMTP"); Ts.Connect (Benutzer, Passwort); ts.sendMessage (vorwärts, vorwärts.getallrecipients ()); order.close (falsch); store.close (); ts.close (); System.out.println ("Nachricht erfolgreich weitergeleitet ...");}Das obige dreht sich alles um diesen Artikel. Ich hoffe, es wird für alle hilfreich sein, zu lernen, wie man E -Mails per Javamail senden und empfängt.