L'API Javamail utilise la classe Javax.mail.Message pour représenter un message. La classe de messages est une classe abstraite, nous devons donc utiliser sa classe Javax.mail.internet.MimeMessage pour créer un objet d'instance de la classe de messages. Si nous créons un message texte simple, la classe MimeMessage peut répondre à nos besoins. Cependant, si nous devons créer un e-mail complexe contenant des ressources ou des pièces jointes embarquées, nous devons utiliser des classes telles que MimeMessage, Javax.mail.internet.mimebodyPart et Javax.mail.internet.mimemultupar dans l'API Javamail.
1. La classe MimeMessage représente l'intégralité de l'e-mail
2. La classe MIMEBODYPART représente un message MIME de l'e-mail
3. La classe MIMEMULPART représente un message MIME combiné composé de plusieurs messages MIME.
La relation de travail de ces trois classes est présentée dans la figure ci-dessous:
Bien que les développeurs d'applications n'aient généralement besoin d'utiliser les trois classes principales: MimeMessage, MIMEBODYPART et MIMEMULPART lors de la création de contenu par e-mail à l'aide de Javamailapi, il est également nécessaire de comprendre leur relation d'héritage de classe. La figure suivante répertorie les relations successives et les méthodes courantes de ces trois classes.
Ensuite, utilisez la classe javax.mail.internet.mimeMessage pour créer un simple message texte.
Importer java.util.date; import java.util.properties; import javax.mail.message; import javax.mail.session; import javax.mail.internet.internetaddress; import javax.mail.internet.mimemessage; Importer java.io.FileoutPuttream; Public Classmessage {public Static Voide [] Scoraguent [] STRINGETPUTAM; args) lève une exception {chaîne de = "[email protected]"; Chaîne à = "[email protected]"; String sujet = "test"; String body = "test !!!"; // Créer une session d'instance de session Session Session = session.getDefaultInstance (New Properties ()); // Créer un objet d'instance mimeMessage mimeMessage msg = new mimeMessage (session); // Définit l'expéditeur msg.setFrom (new InternetAddress (From)); // Définissez le destinataire msg.setRcipients (message.recipentType.to, InternetAddress.Parse (TO)); // Définir la date d'envoi msg.sesentDate (new Date ()); // Définissez le sujet de messagerie MSG.SetSubject (sujet); // Définir le corps e-mail du contenu en texte brut msg.setText (corps); // Enregistrer et générer le contenu e-mail final msg.savechanges (); // Écrivez le contenu de l'objet MIMEMessage dans le fichier msg.writeTo (new FileOutputStream ("c: //test.eml")); }}Nous utilisons le client de messagerie (en utilisant Foxmail ici) pour ouvrir le fichier test.eml sous le lecteur C, et vous pouvez voir les informations suivantes, indiquant que notre e-mail a été créé avec succès.
Voici une brève explication de certaines classes qui apparaissent ci-dessus
1. Classe de mimeMessage: Le ci-dessus a présenté que MimeMessage est une classe d'implémentation concrète de la classe de messages, qui est utilisée pour créer un objet d'instance de la classe de messages. Ici, le constructeur passe un objet de session en tant que paramètre;
2. Classe de session: Cet objet est utilisé pour collecter les informations de connexion réseau entre le client et le serveur de messagerie et définir les informations d'environnement requises pour définir l'intégralité du programme de messagerie. Ces informations sont stockées dans l'objet de session comme les attributs de l'objet de session. L'objet de session utilise l'objet java.util.properties pour obtenir le serveur de messagerie, le nom d'utilisateur, les informations de mot de passe et les informations partagées que l'application doit utiliser. Étant donné que le constructeur de la classe de session est privé, nous utilisons la méthode statique d'usine de getDefaultInstance () fournie par la classe de session pour obtenir un objet de session par défaut;
3. Classe de propriétés: cette classe représente un ensemble de propriétés persistantes, qui est utilisée pour stocker les informations de la paire de valeurs de clé en tant que paramètres pour créer un objet de session. Ici, un ensemble vide est construit comme un paramètre;
4. Classe InternetAddress: cette classe est une sous-classe de la classe d'adresse de classe abstraite, utilisée pour créer une adresse e-mail;
5. Classe de destination: cette classe est une classe interne de la classe de messages. Cette classe a 3 variables statiques. Pour représenter le destinataire, CC représente l'expéditeur CC (le destinataire connaît l'expéditeur CC) et BCC représente l'expéditeur secret de l'expéditeur (le destinataire ne connaît pas l'expéditeur secret de l'expéditeur).
L'e-mail ci-dessus ne contient que du texte simple. Parfois, nous devons utiliser des fichiers HTML pour enrichir notre corps de messagerie, comme utiliser des balises HTML pour taper le corps de messagerie et utiliser des balises HTML pour introduire certaines images ou sons dans le corps de l'e-mail. Le code suivant crée un e-mail contenant le format HTML
Importer java.util.date; import java.util.properties; import javax.mail.message; import javax.mail.session; import javax.mail.internet.internetAddress; import javax.mail.internet.mimessage; import java.ofileoutputtream; public classe main (String [] args) lève une exception {chaîne de = "[email protected]"; Chaîne à = "[email protected]"; String sujet = "test"; String body = "<h4> Bienvenue pour lire cet e-mail </h4>"; // Créer une session d'instance de session Session Session = session.getDefaultInstance (New Properties ()); // Créer un objet d'instance mimeMessage mimeMessage msg = new mimeMessage (session); // Définit l'expéditeur msg.setFrom (new InternetAddress (From)); // Définissez le destinataire msg.setRcipients (message.recipentType.to, InternetAddress.Parse (TO)); // Définir la date d'envoi msg.sesentDate (new Date ()); // définir le sujet de messagerie MSG.SetSubject (sujet); // Définissez le corps de messagerie HTML MSG.SetContent (corps, "Text / HTML; charset = GB2312"); // Enregistrer et générer le contenu du courrier final msg.savechanges (); // Écrivez le contenu de l'objet MIMEMessage dans le fichier msg.writeTo (new FileOutputStream ("c: //test.eml")); }}Nous utiliserons Foxmail pour ouvrir Test.EML et l'affichage suivant
La différence par rapport au code précédent est que lorsque nous définissons le contenu de l'e-mail, nous utilisons la méthode SetContent au lieu de la méthode SetText et spécifions le type MIME du corps de messagerie en tant que texte / HTML.
Maintenant, nous avons appris à créer des e-mails avec des balises HTML, mais parfois nous devrons peut-être insérer des images dans l'e-mail pour exprimer notre sens plus intuitivement. Ensuite, nous devons utiliser la classe MIMEMULPART et la classe MIMEBODYPART
Importer java.io.fileoutputStream; import java.util.properties; import javax.activation.datahandler; import javax.activation.filedatasource; import javax.mail.mesage; import javax.mail.session; import javax.mail.internet.internetaddress; importation; javax.mail.internet.mimebodyPart; import javax.mail.internet.mimessage; import javax.mail.internet.mimemultupar; public class pictureMessage {public static void main (string [] args) exception lance {chaîne de string from = "[email protected]"; // // String d'adresse du destinataire sujet = "HTML Email"; String body = "<a href = http: //www.cnblogs.com>" + "Bienvenue dans le jardin du blog </a> </br>" + "<img src = /" c: //dog.jpg/ ">"; Session Session = Session.getDefaultInstance (New Properties ()); // Créez un objet MimeMessage et définissez divers champs d'en-tête de message MIMEMSSAGE Message = new MIMEMessage (session); Message.setFrom (nouveau InternetAddress (From)); Message.SetRcipients (message.recipentType.to, InternetAddress.Parse (TO)); Message.SetSubject (sujet); // Créez un objet MIMEMULPART avec le sous-type "lié". MIMEMULPART Multipart = new MIMEMULPARTArt ("lié"); / * * Créez un objet MIMEBODYPART représentant le corps HTML et ajoutez-le à l'objet MIMEMULPART créé plus tôt * / MIMEBODYPART HTMLBODYPART = NEW MIMEBODYPART (); htmlbodyPart.setContent (corps, "text / html; charset = gb2312"); multipart.addbodyPart (htmlbodypart); / * * Créez un objet MIMEBODYPART représentant le contenu de l'image et ajoutez-le à l'objet miMemultuPart créé plus tôt * / MIMEBODYPART GIFBODYPART = new MIMEBODYPART (); FiledAdAtaSource fds = new FiledAdAtaSource ("c: //dog.jpg"); gifbodyPart.setFileName (fds.getName ()); gifbodyPart.setDatahandler (nouveau Datahandler (FDS)); multipart.addbodyPart (gifbodypart); / * * Définissez l'objet MIMEMULPART au contenu de l'ensemble du message, faites attention à l'appel de la méthode SavEchanges pour les mises à jour * / message.setContent (multipart); message.SaveChanges (); // Écrivez le contenu de l'objet MimeMessage dans le fichier message.writeTo (new FileOutputStream ("c: //pictureMessage.eml")); }}Le code semble un peu compliqué. Vous pouvez jeter un œil au diagramme relationnel du MimeMessage mentionné ci-dessus, de Mimemultupartit et de MimebodyPart. Cela facilitera la compréhension du code ci-dessus. Nous ouvrons PictureMessage.eml et voyons les informations suivantes, qui montrent que nous avons réussi à créer un e-mail avec une image, et l'image est incluse dans l'e-mail sous la forme d'une pièce jointe.
MIMEMULPART a deux constructeurs.
public mimemultupart () public mimemultupartip (sous-type de chaîne)
Le premier est sans paramètre et l'objet d'instance par défaut a un type MIME mixé. Le second formule un type pour créer un objet d'instance de la classe MIMEMULPART. Il existe trois types couramment utilisés: mixtes, liés et alternatifs. La relation combinée de ces trois types dans MIME est la suivante:
Maintenant, nous utilisons la relation combinée indiquée ci-dessus pour créer un message avec une pièce jointe et une ressource intégrée dans le corps.
Importer java.io.fileoutputStream; import java.util.properties; import javax.activation.datahandler; import javax.activation.filedatasource; import javax.mail.mesage; import javax.mail.session; import javax.mail.internet.internetaddress; importation; javax.mail.internet.mimebodyPart; import javax.mail.internet.mimeMessage; import javax.mail.internet.mimeMultupar; public class complexMessage {public static void Main (String [] args) lance une exception {session = session Session.getDefaultance (New Properties ()); MIMEMessage Message = CreateMessage (session); message.writeTo (new FileOutputStream ("c: //complexmesage.eml")); } public static mimeMessage CreateMessage (Session Session) lève une exception {chaîne de = "[email protected]"; // chaîne d'adresses de l'expéditeur à = "[email protected]"; // String d'adresse du destinataire sujet = "HTML Email"; // Email Subject String Body = "<a href = http: //www.cnblogs.com>" + "Bienvenue dans le parc du blog </a> </br>" + "<img src = /" c: //dog.jpg/ ">"; MIMEMESSAGE Message = new MimeMessage (session); Message.setFrom (nouveau InternetAddress (From)); Message.SetRcipients (message.recipentType.to, InternetAddress.Parse (TO)); Message.SetSubject (sujet); // Créez chaque objet MIMEBODYPART représentant le corps du message et la pièce jointe MIMEBODPART ContentPart = CreateContent (Body, "c: //dog.jpg"); // La pièce jointe suivante peut être une vidéo ou un audio mimeBodyPart attachPart1 = CreateAtachment ("c: //music.mp3"); MIMEBODYPART RAPTPART2 = CreateAtAchment ("c: //video.avi"); // Créez un objet mimemultupart pour combiner le corps du message et l'attachement mimemultupartit allMultiparting = new mimeMultupart ("mixte"); allMultupar.AddBodyPart (contenuPart); allMultupart.addbodyPart (attachPart1); allMultupart.addbodyPart (attachPart2); // Définissez l'intégralité du contenu de l'e-mail sur le message d'objet MIMEMMULUMPART final Message.SetContent (AllMultiPart); message.SaveChanges (); retour du message; } public static mimeBodyPart CreateContent (String Body, String FileName) lève une exception {/ * * Créer un objet MIMEMULPART représentant le message de mime combiné, et l'objet MIMEBODYPART dans lequel l'objet MIMEMULPART est enregistré * / mimeBodyPart ContentPart = new MIMEBODYPART (); MimeMultupart contenuMultiparpart = new mimeMultupart ("lié"); / * * Créez un objet MIMEBODYPART pour enregistrer le corps HTML et l'enregistrer sur mimeMultustr * / MIMEBODYPART HTMLBODYPART = new MIMEBODYPART (); htmlbodyPart.setContent (corps, "text / html; charset = gb2312"); ContentMultupart.AddBodyPart (htmlbodyPart); / * * Créez un objet MIMEBODYPART pour enregistrer l'image et l'enregistrer sur MIMEMULPART * / MIMEBODYPART GIFBODYPART = new MIMEBODYPART (); FiledAdAtaSource fds = new FiledAdAtaSource (nom de fichier); gifbodyPart.setDatahandler (nouveau Datahandler (FDS)); ContentMultupart.AddBodyPart (GIFBODYPART); // Enregistrez l'objet MIMEMULPART à l'objet MIMEBodyPart ContentPart.SetContent (ContentMultiPart); return contentPart; } public static mimeBodyPart CreateAtachment (String FileName) lève une exception {// Créer un objet MIMEBODYPART qui enregistre la pièce jointe et ajoute le contenu de la pièce jointe et les informations correspondantes MIMEBODYPART PIOLPART = new MIMEBODPART (); FiledAdAtaSource fds = new FiledAdAtaSource (nom de fichier); attachPart.setDatahandler (nouveau Datahandler (FDS)); attachPart.setFileName (fds.getName ()); return attachPart; }}Ouvrez le fichier complexMessage.eml et vous pouvez voir le contenu suivant:
Nous avons maintenant appris à créer un e-mail en texte brut, un e-mail au format HTML et un e-mail avec des images et des pièces jointes intégrées. Le prochain article présentera comment envoyer des e-mails Javamail pour démarrer avec le troisième article Envoyer un e-mail
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.