Aperçu
1. Normes liées aux e-mails
Les programmes de services Javamail fournis par les fabricants peuvent implémenter de manière sélective certains protocoles de messagerie, les protocoles de courrier communs comprennent:
SMTP (simple protocole de transfert de courrier) est un protocole de transfert de courrier simple. Il s'agit d'un ensemble de règles pour transmettre le courrier de l'adresse source à l'adresse de destination. Il contrôle la méthode de transit des lettres.
POP3 (Post Office Protocol version 3): Il s'agit d'un protocole standard utilisé pour recevoir des e-mails.
IMAP (Internet Mail Access Protocol): c'est-à-dire le protocole d'accès à la courrier Internet. Il s'agit d'un autre protocole pour POP3.
Ces trois protocoles ont des protocoles correspondant à la transmission cryptée SSL, à savoir SMTPS, POP3S et IMAPS.
MIME (extensions de messagerie Internet polyvalentes): c'est-à-dire la norme d'extension de courrier Internet polyvalent. Ce n'est pas un protocole de transfert de courrier. Cependant, le format est défini pour les messages, les pièces jointes et autres contenus transmis.
2. Introduction à Javamail
Javamail est une API publiée par Sun pour gérer les e-mails. Il n'est pas inclus dans Java SE, mais fait partie de Java EE.
Mail.jar: Ce fichier JAR contient l'API Javamail et les fournisseurs de services SMTP, IMAP et POP3 fournis par Sun;
Activation.jar: Ce fichier JAR contient des implémentations de l'API JAF et du Sun.
Les classes de base utilisées dans les packages Javamail pour le traitement des e-mails sont: Propriétés, session, le message, l'adresse, l'authentificateur, le transport, le magasin, etc.
3. Processus de transfert de courrier
Comme indiqué dans l'image ci-dessus, les étapes de traitement des e-mails sont les suivantes:
4. Structure du message
Classe MimeMessage: représente l'intégralité de l'e-mail.
Classe MIMEBODYPART: Un message MIME représentant le message.
Classe MIMEMULTIPART: représente une information mime combinée composée de multiples informations de mime.
5. La classe de base de Javamail
Javamail fournit une abstraction de haut niveau de l'envoi et de la réception des e-mails, formant certaines interfaces et classes clés, qui constituent la base du programme. Jetons un coup d'œil à ces objets les plus courants.
6. Java.util.properties Classe (Objet Property)
La classe java.util.properties représente un ensemble de propriétés.
Chacune de ses clés et valeurs est de type chaîne de type.
Étant donné que Javamail doit communiquer avec le serveur de messagerie, cela nécessite que le programme fournisse de nombreuses informations telles que l'adresse du serveur, le port, le nom d'utilisateur, le mot de passe, etc. Javamail encapsule ces informations d'attribut via l'objet Properties.
Exemple: par exemple, le code suivant résume plusieurs informations d'attribut:
Properties Prop = new Properties (); prop.setProperty ("mail.debug", "true"); prop.setproperty ("mail.host", "[e-mail protégé]"); prop.setproperty ("mail.transport.protocol", "smtp"); pro.setproperty ("mail.smtp.auth", "true");Pour différents protocoles de courrier, Javamail stipule que les fournisseurs de services doivent prendre en charge une série d'attributs.
Le tableau suivant est quelques attributs communs (les valeurs d'attribut sont définies en tant que type de chaîne, et la barre de type d'attribut indique uniquement comment les attributs sont analysés):
7. Javax.mail.Session Classe (objet de session)
La session représente une session de messagerie.
Les principales fonctions de la session comprennent deux aspects:
Recevez diverses informations d'attribut de configuration: Informations d'attribut définies via l'objet Propriétés;
Initialisez l'environnement Javamail: Initialisez l'environnement Javamail en fonction du fichier de configuration Javamail pour créer des instances d'autres classes importantes via l'objet de session.
Javamail fournit des informations de configuration de base via les fichiers suivants dans le répertoire Meta-Inf du package JAR afin que la session puisse charger la classe d'implémentation du fournisseur en fonction de ce fichier de configuration:
javamail.default.providers;
javamail.default.address.map.
exemple:
Propriétés PropS = New Properties (); Props.SetProperty ("Mail.Transport.ProtoCol", "SMTP"); Session Session = Session.getInstance (Props);8. Javax.Mail.Transport Classe (transfert de courrier)
Il n'y a que deux façons de gérer les opérations par e-mail: l'envoi ou la réception.
Javamail décrit ces deux opérations différentes comme une transmission (javax.mail.transport) et un stockage (javax.mail.store), transmettre l'envoi du courrier correspondant et stocker la réception du courrier correspondant.
GetTransport: getTransport () dans la classe de session a plusieurs méthodes surchargées qui peuvent être utilisées pour créer des objets de transport.
Connect: Si la commande d'authentification - Mail.smtp.auth est définie, alors lors de la connexion au serveur à l'aide de la méthode Connect de la classe de transport, le nom d'utilisateur et le mot de passe doivent être ajoutés.
SendMessage: La méthode SendMessage de la classe de transport est utilisée pour envoyer des messages de messagerie.
CLOSE: La méthode de fermeture de la classe de transport est utilisée pour fermer la connexion au serveur de messagerie.
9. Javax.mail.store Classe (stockage de courrier)
getStore: getStore () dans la classe de session a plusieurs méthodes surchargées qui peuvent être utilisées pour créer des objets de magasin.
Connect: Si la commande d'authentification - Mail.smtp.auth est définie, alors lors de la connexion au serveur à l'aide de la méthode Connect de la classe de magasin, le nom d'utilisateur et le mot de passe doivent être ajoutés.
GetFolder: La méthode GetFolder de la classe de magasin peut obtenir l'objet de dossier du dossier dans la boîte aux lettres.
Close: La méthode étroite de la classe de magasin est utilisée pour fermer la connexion au serveur de messagerie.
10. Javax.mail.Message (objet de message)
javax.mail.mesage est une classe abstraite qui ne peut être instanciée que par les sous-classes, et dans la plupart des cas, il s'agit de javax.mail.internet.mimeMessage.
MimeMessage représente un e-mail de type MIME.
Pour créer un message, vous devez passer l'objet de session au constructeur MimeMessage:
MIMEMESSAGE Message = new MimeMessage (session);
Remarque: Il existe d'autres constructeurs, tels que l'utilisation de flux d'entrée au format RFC822 pour créer des messages.
setFrom: définissez l'expéditeur de l'e-mail
SetReccipient: Définissez l'expéditeur, la personne CC et la personne secrète de l'e-mail
Les trois types d'adresses prédéfinis sont:
Message.recipentType.to: destinataire
Message.recipentType.cc: Personne CC
Message.recipentType.BCC: Donner secrètement
setSubject: définissez le sujet de l'e-mail
setContent: définissez le contenu du courrier
setText: Si le contenu de l'e-mail est en texte brut, vous pouvez utiliser cette interface pour définir le contenu texte.
10. Javax.mail.address (adresse)
Une fois que vous avez créé la session et le message et rempli le message, vous pouvez utiliser l'adresse pour déterminer l'adresse e-mail. Comme le message, l'adresse est également une classe abstraite. Vous utilisez la classe javax.mail.internet.internetAddress.
Si l'adresse créée ne contient qu'une adresse e-mail, transmettez simplement l'adresse e-mail au constructeur.
exemple:
Adresse d'adresse = new InternetAddress ("[e-mail protégé]");
Authentificateur: certifié
Comme la classe Java.net, l'API Javamail peut également utiliser l'authentificateur pour accéder aux ressources protégées via le nom d'utilisateur et le mot de passe. Pour l'API Javamail, ces ressources sont des serveurs de courrier. Javamail Authenticator est dans le package javax.mail, et il est différent de l'authentificateur de classe avec le même nom dans java.net. Les deux ne partagent pas le même authentificateur car l'API Javamail est utilisée pour Java 1.1, et il n'a pas la catégorie java.net.
Pour utiliser Authenticator, créez d'abord une sous-classe de la classe abstraite et renvoyez une instance de mot de passe-Authentication à partir de la méthode GetPasswordAuthentication (). Une fois la création terminée, vous devez enregistrer l'authentificateur avec la session. Ensuite, lorsque l'authentification est requise, l'authentificateur sera informé. Vous pouvez faire apparaître Windows ou lire les noms d'utilisateur et les mots de passe à partir d'un fichier de configuration (bien qu'il ne soit pas sécurisé de ne pas crypter) et de les retourner au programme d'appel en tant qu'objets de mot de passe-authentification.
exemple:
Properties props = new Properties (); Authenticator auth = new myAuthenticator (); session session = session.getDefaultInstance (props, auth);
Exemple
Envoyer la messagerie texte
public static void main (String [] args) lève une exception {Properties prop = new Properties (); 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. Créer des session session session = session.getInstance (prop); Transport ts = null; // 2. Obtenez l'objet de transport via session ts = session.getTransport (); // 3. Connectez-vous au serveur de messagerie Ts.Connect (mail_server_host, utilisateur, mot de passe); // 4. Créer un message MIMEMESSAGE Message = new MimeMessage (session); // En-tête de messagerie électronique Message.SetFrom (nouveau InternetAddress (Mail_From)); // expéditeur du message.setReccipient (message.recipentType.to, new InternetAddress (mail_to)); // le destinataire du e-mail.SetReccipient (message.recipentType.cc, nouveau InternetAddress (Mail_CC)); // le CC Message.SetReccipient (message.recipentType.BCC, nouveau InternetAddress (Mail_BCC)); // le message Sender Message.SetSubject ("Test Text Mail"); // le titre de l'e-mail // le message Message.seTTEXT ("inégalé dans le monde."); // 5. Envoyer un e-mail T.SendMessage (message, message.getAllRescicipients ()); t.close ();}Envoyer des e-mails formatés HTML
public static void main (String [] args) lève une exception {Properties prop = new Properties (); 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. Créer des session session session = session.getInstance (prop); Transport ts = null; // 2. Obtenez l'objet de transport via session ts = session.getTransport (); // 3. Connectez-vous au serveur de messagerie Ts.Connect (mail_server_host, utilisateur, mot de passe); // 4. Créer un message MIMEMESSAGE Message = new MimeMessage (session); // En-tête de messagerie électronique Message.SetFrom (nouveau InternetAddress (Mail_From)); // expéditeur du message.setReccipient (message.recipentType.to, new InternetAddress (mail_to)); // le destinataire du e-mail.SetReccipient (message.recipentType.cc, nouveau InternetAddress (Mail_CC)); // le CC Message.SetReccipient (message.recipentType.BCC, nouveau InternetAddress (Mail_BCC)); // le destinataire du e-mail.SetSubject ("Tester HTML Mail"); // Le titre de la chaîne de messagerie htmlcontent = "<h1> Bonjour </h1>" + "<p> montre l'image <img src = 'cid: abc.jpg'> 1.jpg </p>"; MIMEBODYPART Text = new MIMEBODYPART (); text.setContent (htmlcontent, "text / html; charset = utf-8"); MIMEBODYPART Image = new MIMEBODYPART (); Datahandler dh = new Datahandler (nouveau filedAdAtaSource ("d: // [04] temp // img // 1.jpg")); Image.setDatahandler (DH); image.setContendId ("ABC.JPG"); // Décrivez la relation de données mimemultupart mm = new mimeMultupart (); mm.AddbodyPart (texte); mm.AddBodyPart (image); mm.SetSubType ("lié"); message.setContent (MM); message.SaveChanges (); // 5. Envoyer un e-mail T.SendMessage (message, message.getAllRescicipients ()); t.close ();}Envoyer des e-mails avec des pièces jointes
public static void main (String [] args) lève une exception {Properties prop = new Properties (); 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. Créer des session session session = session.getInstance (prop); Transport ts = null; // 2. Obtenez l'objet de transport via session ts = session.getTransport (); // 3. Connectez-vous au serveur de messagerie Ts.Connect (mail_server_host, utilisateur, mot de passe); // 4. Créer un message MIMEMESSAGE Message = new MimeMessage (session); // En-tête de messagerie électronique Message.SetFrom (nouveau InternetAddress (Mail_From)); // expéditeur du message.setReccipient (message.recipentType.to, new InternetAddress (mail_to)); // le destinataire du e-mail.SetReccipient (message.recipentType.cc, nouveau InternetAddress (Mail_CC)); // le CC Message.SetReccipient (message.recipentType.BCC, nouveau InternetAddress (Mail_BCC)); // le destinataire du e-mail.SetSubject ("Tester avec la pièce jointe"); // Le titre de l'email MIMEBODYPART text = new MIMEBODYPART (); text.setContent ("Il y a deux pièces jointes dans l'e-mail.", "text / html; charset = utf-8"); // Décrivez la relation de données mimemultupart mm = new mimeMultupart (); mm.SetSubType ("lié"); mm.AddbodyPart (texte); String [] files = {"d: // [04] temp // img // 1.jpg", "d: // [04] temp // img // 2.jpg"}; // Ajouter une pièce jointe par e-mail pour (String FileName: fichiers) {MIMEBodyPart attachPart = new MIMEBODYPART (); attachPart.AttachFile (nom de fichier); mm.AddbodyPart (attachPart); } message.setContent (mm); message.SaveChanges (); // 5. Envoyer un e-mail T.SendMessage (message, message.getAllRescicipients ()); t.close ();}Recevez des e-mails dans votre boîte aux lettres
classe publique Storemail {final static String user = "robot"; // nom d'utilisateur final statique String Password = "Password520"; // mot de passe public final statique String mail_server_host = "mail. ***. Com"; // Mailbox Server public final static string type_html = "text / html; charset = utf-8"; // Type de contenu texte public final statique String mail_from = "[e-mail protégé]"; // Sender public final static String mail_to = "[e-mail protégé]"; // au destinataire public final statique String Mail_cc = "[e-mail protégé]"; // CC Person public final static String mail_bcc = "[e-mail protégé]"; // Envoyer secrètement public static void main (String [] args) lève une exception {// Créer un objet Propriétés avec des informations de connexion spécifiques Properties Prop = New Properties (); Prop.SetProperty ("Mail.debug", "True"); Prop.SetProperty ("Mail.store.protoCol", "POP3"); Prop.SetProperty ("Mail.pop3.host", Mail_Server_Host); // 1. Créer la session de session Session Session = session.getInstance (PROP); // 2. Obtenez l'objet du magasin via Session Store Store = Session.getStore (); // 3. Connectez-vous au Mail Server Store.Connect (mail_server_host, utilisateur, mot de passe); // 4. Obtenez le dossier de messagerie dans le dossier du dossier de boîte aux lettres = Store.GetFolder ("Inbox"); dossier.open (dossier.read_only); // Obtenez tous les messages dans le message du message Message Message [] messages = dossier.getMessages (); pour (int i = 0; i <messages.length; i ++) {String subject = messages [i] .getSubject (); String from = (messages [i] .getFrom () [0]). ToString (); System.out.println ("th" + (i + 1) + "Le sujet du message:" + sujet); System.out.println ("th" + (i + 1) + "L'adresse de l'expéditeur de l'e-mail:" + de); } // 5. Close Folder.Close (false); store.close (); }}Email de transfert
Exemple: recevez le premier e-mail dans le dossier de messagerie spécifié et transmettez-le
public static void main (String [] args) lève une exception {Properties prop = new Properties (); 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. Créer la session Session Session = session.getDefaultInstance (PROP); // 2. Lisez le magasin de dossier Mail Store = Session.getStore ("POP3"); store.connect (mail_server_host, utilisateur, mot de passe); Dossier dossier = store.getFolder ("Inbox"); dossier.open (dossier.read_only); // reçoit le premier e-mail dans le message du dossier de messagerie [] messages = dossier.getMessages (); if (Messages.Length <= 0) {return; } Message message = messages [0]; // Imprime la chaîne de message de clé de = InternetAddress.ToString (message.GetFrom ()); if (from! = null) {System.out.println ("de:" + de); } String ReplyTo = InternetAddress.ToString (message.getReplyTo ()); if (Répondre à! = null) {System.out.println ("Répondre à:" + Répondre); } Chaîne vers = InternetAddress.ToString (message.getRecipients (message.recicipentType.to)); if (to! = null) {System.out.println ("à:" + à); } String sujet = message.getSubject (); if (sujet! = null) {System.out.println ("Sujet:" + Sujet); } Date envoyée = message.getSentDate (); if (envoyé! = null) {System.out.println ("envoyé:" + envoyé); } // Définit le message d'en-tête de messagerie électronique Forward = new MIMEMessage (session); Forward.setFrom (nouveau InternetAddress (Mail_From)); Forward.SetReccipient (message.recipentType.to, nouveau InternetAddress (Mail_To)); Forward.SetSubject ("FWD:" + message.getSubject ()); // Définit le contenu des e-mails mimeBodyPart bodyPart = new MimeBodyPart (); bodyPart.setContent (message, "message / rfc822"); Multipart multipart = new mimeMultuplart (); multipart.addbodyPart (bodyPart); Forward.setContent (Multipart); Forward.SaveChanges (); Transport ts = session.getTransport ("smtp"); T.Connect (utilisateur, mot de passe); T.SendMessage (avant, avant.GetAllrecipients ()); dossier.close (false); store.close (); t.close (); System.out.println ("Message transmis avec succès ...");}Ce qui précède concerne cet article. J'espère qu'il sera utile pour tout le monde d'apprendre à envoyer et à recevoir des e-mails de Javamail.