JavaMail API - Kernklassen
Die JavaMail-API besteht aus einigen Schnittstellen und Klassen, die zum Senden, Lesen und Löschen von E-Mail-Nachrichten verwendet werden. Obwohl die JavaMail-API viele Pakete enthält, werden die beiden Hauptpakete behandelt , die in der Java Mail-API häufig verwendet werden: javax.mail und javax.mail.internet . Diese Pakete enthalten alle JavaMail-Kernklassen. Sie sind:
Klasse | Beschreibung |
---|---|
javax.mail.Session | Die Schlüsselklasse der API. Ein Multithread-Objekt repräsentiert die Verbindungsfactory. |
javax.mail.Message | Eine abstrakte Klasse, die eine E-Mail-Nachricht modelliert. Unterklassen stellen die tatsächlichen Implementierungen bereit. |
javax.mail.Address | Eine abstrakte Klasse, die die Adressen (von und zu Adressen) in einer Nachricht modelliert. Unterklassen stellen die spezifischen Implementierungen bereit. |
javax.mail.Authenticator | Eine abstrakte Klasse zum Schutz von Mail-Ressourcen auf dem Mail-Server. |
javax.mail.Transport | Eine abstrakte Klasse, die einen Nachrichtentransportmechanismus zum Senden einer E-Mail-Nachricht modelliert. |
javax.mail.Store | Eine abstrakte Klasse, die einen Nachrichtenspeicher und sein Zugriffsprotokoll zum Speichern und Abrufen von Nachrichten modelliert. Ein Geschäft ist in Ordner unterteilt. |
javax.mail.Folder | Eine abstrakte Klasse, die einen Ordner mit E-Mail-Nachrichten darstellt. Es kann Unterordner enthalten. |
javax.mail.internet.MimeMessage | Nachricht ist eine abstrakte Klasse und muss daher mit einer Unterklasse arbeiten. In den meisten Fällen verwenden Sie eine MimeMessage. Eine MimeMessage ist eine E-Mail-Nachricht, die MIME-Typen und -Header versteht. |
javax.mail.internet.InternetAddress | Diese Klasse repräsentiert eine Internet-E-Mail-Adresse mit der Syntax von RFC822. Die typische Adressensyntax hat die Form [email protected] oder Personal Name <[email protected]> . |
Lassen Sie uns jede dieser Klassen im Detail studieren und in den folgenden Kapiteln werden wir Beispiele anhand jeder dieser Klassen untersuchen.
Sitzungsklasse
Die Session- Klasse ist die primäre Klasse der JavaMail-API und wird nicht in Unterklassen unterteilt. Das Sitzungsobjekt fungiert als Verbindungsfactory für die JavaMail-API, die sowohl die Konfigurationseinstellung als auch die Authentifizierung übernimmt.
Das Sitzungsobjekt kann auf folgende Arten erstellt werden:
Durch Nachschlagen des im JNDI-Dienst gespeicherten verwalteten Objekts
InitialContext ctx = new InitialContext(); Session session = (Session) ctx.lookup("usersMailSession");
usersMailSession ist das JNDI- Namensobjekt, das als verwaltetes Objekt für das Sitzungsobjekt verwendet wird. usersMailSession kann mit den erforderlichen Parametern als Name / Wert-Paare erstellt und konfiguriert werden, einschließlich Informationen wie dem Hostnamen des Mailservers, dem Benutzerkonto, das die Mail sendet, und den vom Sitzungsobjekt unterstützten Protokollen.
Eine andere Methode zum Erstellen des Sitzungsobjekts basiert auf dem programmatischen Ansatz, bei dem Sie ein java.util.Properties- Objekt verwenden können, um einige der Standardinformationen zu überschreiben, z. B. den Namen des Mailservers, den Benutzernamen, das Kennwort und andere Informationen für Ihre gesamte Anwendung freigegeben.
Der Konstruktor für die Sitzungsklasse ist privat . Daher bietet die Session- Klasse zwei Methoden (unten aufgeführt), mit denen das Session- Objekt abgerufen wird.
getDefaultInstance(): Es gibt zwei Methoden, um das Sitzungsobjekt mithilfe der Methode getDefaultInstance () abzurufen. Es gibt die Standardsitzung zurück.
public static Session getDefaultInstance(Properties props) public static Session getDefaultInstance(Properties props,Authenticator auth)
getInstance(): Es gibt zwei Methoden, um das Sitzungsobjekt mithilfe der Methode getInstance () abzurufen. Es gibt die neue Sitzung zurück.
public static Session getInstance(Properties props) public static Session getInstance(Properties props,Authenticator auth)
Nachrichtenklasse
Nachdem das Sitzungsobjekt erstellt wurde, erstellen wir nun eine Nachricht, die gesendet wird. Der Nachrichtentyp lautet javax.mail.Message .
Nachricht ist eine abstrakte Klasse. Daher wird hauptsächlich die Unterklasse javax.mail.internet.MimeMessage verwendet.
Um die Nachricht zu erstellen, müssen Sie das Sitzungsobjekt im MimeMessage-Klassenkonstruktor übergeben. Zum Beispiel:
MimeMessage message=new MimeMessage(session);
Sobald das Nachrichtenobjekt erstellt ist, müssen wir Informationen darin speichern. Die Nachrichtenklasse implementiert die Schnittstelle javax.mail.Part, während javax.mail.internet. MimeMessage implementiert javax.mail.internet.MimePart. Sie können entweder message.setContent () oder mimeMessage.setText () verwenden, um den Inhalt zu speichern.
Häufig verwendete Methoden der MimeMessage-Klasse sind
Methode Beschreibung public void setFrom (Adresse Adresse) wird verwendet, um das Feld from header festzulegen. public void addRecipients (Typ Message.RecipientType, Zeichenfolgenadressen) wird verwendet, um die angegebene Adresse zum Empfängertyp hinzuzufügen. public void setSubject (String subject) wird verwendet, um das Betreff-Header-Feld festzulegen. public void setText (String textmessage) Wird verwendet, um den Text als Nachrichteninhalt mithilfe des MIME-Typs text / plain festzulegen.
Adressklasse
Nachdem wir nun ein Sitzungs- und ein Nachrichtenobjekt (mit darin gespeichertem Inhalt) haben, müssen wir den Brief mithilfe des Adressobjekts adressieren .
Adresse ist eine abstrakte Klasse. Daher wird meistens die Unterklasse javax.mail.internet.InternetAddress verwendet.
Die Adresse kann durch Übergeben der E-Mail-Adresse erstellt werden:
Address address = new InternetAddress("[email protected]");
Eine andere Möglichkeit, eine Adresse zu erstellen, besteht darin, den Namen zusammen mit der E-Mail-Adresse zu übergeben:
Address address = new InternetAddress("[email protected]", Manisha);
Sie können auch die Felder An, Von, CC, BCC wie folgt festlegen
message.setFrom(address)
message.addRecipient (Typ, Adresse)
Drei vordefinierte Adresstypen sind Objekte mit einem dieser Werte:
Message.RecipientType.TO
Message.RecipientType.CC
Message.RecipientType.BCC
Authenticator-Klasse
Die Klasse Authenticator stellt ein Objekt dar, das weiß, wie eine Authentifizierung für eine Netzwerkverbindung abgerufen wird. In der Regel wird der Benutzer dazu aufgefordert, Informationen einzuholen.
Authenticator ist eine abstrakte Klasse. Sie erstellen eine Unterklasse PasswordAuthentication und übergeben einen Benutzernamen und ein Kennwort an den Konstruktor.
Sie müssen den Authenticator bei der Sitzung registrieren, wenn Sie ein Sitzungsobjekt erstellen.
Im Folgenden finden Sie ein Beispiel für die Verwendung von Authenticator :
Properties props = new Properties();
//Override props with any customized data
PasswordAuthentication auth = new PasswordAuthentication("manisha", "pswrd")
Session session = Session.getDefaultInstance(props, auth);
Transportklasse
Die Transportklasse wird als Nachrichtentransportmechanismus verwendet. Diese Klasse verwendet normalerweise das SMTP-Protokoll, um eine Nachricht zu senden.
Es ist eine abstrakte Klasse.
Sie können die Standardversion der Klasse verwenden, indem Sie einfach die statische send () -Methode aufrufen :
Transport.send(message);
Die andere Möglichkeit, eine Nachricht zu senden, besteht darin, eine bestimmte Instanz aus der Sitzung für Ihr Protokoll abzurufen, den Benutzernamen und das Kennwort weiterzugeben (leer, falls nicht erforderlich), die Nachricht zu senden und die Verbindung zu schließen:
message.saveChanges(); // implicit with send() //Get transport for session Transport transport = session.getTransport("smtp"); //Connect transport.connect(host, username, password); //repeat if necessary transport.sendMessage(message, message.getAllRecipients()); //Done, close the connection transport.close();
Klasse speichern
Eine abstrakte Klasse, die einen Nachrichtenspeicher und sein Zugriffsprotokoll zum Speichern und Abrufen von Nachrichten modelliert. Unterklassen bieten tatsächliche Implementierungen. Store erweitert die Service- Klasse, die viele gängige Methoden zum Benennen von Stores, zum Herstellen einer Verbindung zu Stores und zum Abhören von Verbindungsereignissen bietet.
Clients erhalten Zugriff auf einen Nachrichtenspeicher, indem sie ein Speicherobjekt abrufen, das das Datenbankzugriffsprotokoll implementiert. Bei den meisten Nachrichtenspeichern muss der Benutzer authentifiziert werden, bevor er den Zugriff zulässt. Die Verbindungsmethode führt diese Authentifizierung durch.
Store store = session.getStore("pop3");
store.connect(host, username, password);
Ordnerklasse
Ordner ist eine abstrakte Klasse, die einen Ordner für E-Mail-Nachrichten darstellt. Unterklassen implementieren protokollspezifische Ordner. Ordner können sowohl Unterordner als auch Nachrichten enthalten, wodurch eine hierarchische Struktur bereitgestellt wird.
Nachdem Sie eine Verbindung zum Store hergestellt haben, können Sie einen Ordner abrufen, der geöffnet werden muss, bevor Sie Nachrichten daraus lesen können.
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
Die Methode getFolder (String name) für ein Folder-Objekt gibt den benannten Unterordner zurück. Schließen Sie die Verbindung "Store" und "Folder", sobald Sie die E-Mails gelesen haben.
Wir können die Beziehung zwischen Speicher und Ordner wie folgt sehen:
Wie wir sehen können, verfügt der Server für jedes Benutzerkonto über einen Speicher, in dem die Nachrichten des Benutzers gespeichert werden. Der Speicher ist in Ordner unterteilt, und der Ordner "Posteingang" ist in erster Linie der Ordner, der E-Mail-Nachrichten enthält. Ein Ordner kann sowohl Nachrichten als auch Unterordner enthalten.