Java Mail est un outil qui utilise des comptes de messagerie existants pour envoyer des e-mails. Par exemple, j'enregistre un compte de messagerie avec netEase. Grâce au contrôle de Java Mail, je ne peux pas me connecter à la boîte aux lettres NetEase en personne, afin que le programme puisse utiliser automatiquement la boîte aux lettres NetEase pour envoyer des e-mails. Ce mécanisme est largement utilisé dans l'activation d'enregistrement et l'envoi de spam.
Le processus général de l'envoi Java Mail est le suivant:
1. Construisez une classe spécifique héritée de javax.mail.authenticator et remplacez la méthode getPasswordAuthentication () à l'intérieur. Cette classe est utilisée comme vérification de connexion pour vous assurer que vous avez le droit d'envoyer des e-mails à cette boîte aux lettres.
2. Créez un fichier de propriétés, qui stocke des paramètres tels que l'adresse du serveur SMTP.
3. Créez un javax.mail.Session via le fichier de propriétés construites et la classe de béton javax.mail.authenticator. La création d'une session équivaut à se connecter à l'adresse e-mail. Le reste est naturellement un nouvel e-mail.
4. Pour créer le contenu de l'e-mail, il s'agit généralement d'un objet javax.mail.internet.MimeMessage, et spécifiez l'expéditeur, le destinataire, le sujet, le contenu, etc.
5. Utilisez la classe d'outils javax.mail.transport pour envoyer des e-mails.
Vous trouverez ci-dessous le code que j'ai encapsulé, et les commentaires sont également assez détaillés.
1. Premièrement, il s'agit d'une classe spécifique héritée de javax.mail.authenticator. La méthode GetPasswordAuthentication () consiste à créer un objet de mot de passe-Authentication et à le renvoyer, ce qui est un peu déroutant de comprendre les intentions de conception de Java Mail. Il se peut que Javax.mail.authenticator nous fournit des mesures de vérification supplémentaires pour assurer la sécurité.
package com.mzule.simplemail; import javax.mail.authenticator; import javax.mail.passwordAuthentication; / ** * Vérification de la connexion des boîtes aux lettres du serveur * * @author mzule * * / classe publique MailAuthenticator étend Authenticator {/ ** * nom d'utilisateur (boîte aux lettres de connexion) * / Private String Username; / ** * mot de passe * / mot de passe de chaîne privée; / ** * Initialiser la boîte aux lettres et le mot de passe * * @param nom d'utilisateur Boîte aux lettres * @param mot de passe mot de passe * / public MailAuthenticator (String Username, String Motway) {this.userName = username; this.password = mot de passe; } String getPassword () {retour mot de passe; } @Override Protected PasswordAuthentication GetPasswordAuthentication () {return new PasswordAuthentication (nom d'utilisateur, mot de passe); } String getUserName () {return username; } public void setPassword (String Motword) {this.password = mot de passe; } public void setUsername (String username) {this.userName = username; }}2. Email Envoi du cours , les étapes restantes sont implémentées dans cette classe. Simplemail dans le code est un pojo qui résume le sujet et le contenu de l'e-mail. Je pense qu'il n'est pas approprié d'inclure à la fois la rubrique et le contenu dans un paramètre de méthode, j'ai donc surchargé cette méthode. De plus, car les adresses du serveur SMTP de la plupart des boîtes aux lettres peuvent être calculées par adresse e-mail. Pour plus de simplicité, un constructeur qui ne nécessite pas d'adresse de serveur SMTP est fourni.
package com.mzule.simplemail; import java.util.list; import java.util.properties; Importer javax.mail.messagingException; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.addressException; import javax.mail.internet.internetaddress; import javax.mail.internet.mimessage; import javax.mail.internet.MiMmessage.Recessage; import; / ** * Expéditeur de courrier simple, peut être envoyé en simple ou en masse. * * @author mzule * * / classe publique SimpleMailSender {/ ** * Fichier props pour l'envoi de courrier * / Propriétés transitoires finales privées props = System.getProperties (); / ** * Vérification de connexion du serveur de courrier * / Authentificateur de MailAuthenticatrice transitoire privée; / ** * Session par e-mail * / Session transitoire privée; / ** * Initialiser l'expéditeur de messagerie * * @param SMTPHOSTNAME * SMTP Mail Server Address * @Param Username * Username (Adresse) Pour l'envoi de courrier * @param mot de passe * pour l'envoi de courriel * / public SimpleMailSender (USERNAME FINAL SMTPHOSTNAME, Final String Username, Final String Word-mot) {init (userName, mot de passe, smTPhostname); } / ** * Initialiser l'expéditeur de messagerie * * @param nom d'utilisateur * nom d'utilisateur (adresse) des e-mails envoyant des e-mails, et utilisez-le pour résoudre l'adresse du serveur SMTP * @param mot de passe * mot de passe pour l'envoi d'e-mails * / public simplemailSender (Final String Username, Mot de passe final String) {// Solve le serveur SMTP à travers "SMTP. + username.split ("@") [1]; init (nom d'utilisateur, mot de passe, smtphostname); } / ** * Initialisation * * @param nom d'utilisateur * nom d'utilisateur (adresse) pour envoyer l'e-mail * @param mot de passe * mot de passe * @param smtphostname * SMTP Host Adresse * / private void init (String username, String Motway, String smtPhostName) {// Initialize props props. props.put ("mail.smtp.host", smtPhostName); // Vérifiez Authenticator = new MailAuthenticator (nom d'utilisateur, mot de passe); // Créer ses session session = session.getInstance (accessoires, authentificateur); } / ** * Envoyer un e-mail * * @param destinataire du destinataire * Adresse e-mail * @Param Sujet * Sujet par e-mail * @param Contenu * Contenu par e-mail * @throws AddressException * @throws MessageSException * / public void Send (STRING Fédé, Sujet String, contenu de l'objet) lance AddressException, MessagingException {// Create Mime Type Mail MimeMessage Message = new MimeMessage (session); // SET SEPDER MESSES.SETFROM (nouveau InternetAddress (authenticator.getUserName ())); // Définir le destinataire Message.SetRcipient (destinataireType.to, nouveau InternetAddress (destinataire)); // Définir Message.SetSubject (sujet); // Définissez le message Message Message.SetContent (Content.ToString (), "Text / Html; charSet = UTF-8"); // Envoyer Transport.Send (message); } / ** * Email en vrac * * @param destinataire * destinataires * @param sujet * sujet * @param contenu * contenu * @throws adressException * @throws messingException * / public void Send (list <string> destinataires, string sujet, objet contenu) lance AddressException, messingException {// create mime type mail MIMMEMESSAGE Message = new MimeMessage (session); // Définissez le message Sender.SetFrom (nouveau InternetAddress (authenticator.getUserName ())); // définir le destinataire final int num = destinataires.size (); InternetAddress [] adresses = new InternetAddress [num]; pour (int i = 0; i <num; i ++) {adresses [i] = new InternetAddress (destinataires.get (i)); } message.setRcipients (destinataireType.to, adresses); // Définir le sujet Message.SetSubject (sujet); // Définissez le message Message Message.SetContent (Content.ToString (), "Text / Html; charSet = UTF-8"); // Envoyer Transport.Send (message); } / ** * Envoyer un e-mail * * @param destinataire du destinataire * Adresse e-mail du destinataire * @Param Mail * Objet Mail * @throws AddressException * @throws MessageSException * / public void Send (Finnicien String, SIMPLEMAIL MAIL) lève AddressException, MessageSException {Send (destinataire, mail.getSubject (), mail.getContent ()); } / ** * Email en vrac * * @param destinataire * destinataire * @param mail * Objet mail * @throws AddressException * @throws messingException * / public void Send (list <string> destinataires, SIMPLEMAIL MAIL) lève AddressException, MessageNException {send (destinataires, mail.getSubject (), mail.getContent ()); }}3. Appeler l'expéditeur de boîte aux lettres ci-dessus peut créer une classe d'usine . La classe d'usine peut résumer le processus de création, il devient donc très pratique d'obtenir le nom d'utilisateur de la boîte aux lettres en lisant le fichier de configuration. Le code suivant a été écrit lorsque j'écrivais le mode observateur, et il a simplement démontré la classe d'usine.
package com.mzule.dp.observer.factory; import com.mzule.dp.observer.constant.mailsenderType; import com.mzule.simplemail.simplemailsender; / ** * Outbox Factory * * @author mzule * * / classe publique MailSenderFactory {/ ** * Service Box * / private static SimpleMailSender Servicesms = null; / ** * Obtenez la boîte aux lettres * * @Param Type Mailbox Type * @return Mailbox qui correspond au type * / public static SimpleMailSender getSender (MailSenderType type) {if (type == MailSenderType.Service) {if (Servicesms == null) {Services = new SimpleMailSender ("[email protected]", "Hidden"); } return Servicesms; } return null; }}4. Envoyer un e-mail ou le code dans la démo en mode observateur, hein.
package com.mzule.dp.observer.observer; import java.util.arraylist; import java.util.list; import java.util.observable; import java.util.observable; import java.util.observable; import java.util.observer; import javax.mail.messagingException; import javax.mail.internet.addressexception; import; com.mzule.dp.observer.constant.mailsenderType; import com.mzule.dp.observer.factory.mailsenderfactory; import com.mzule.dp.observer.po.product; import com.mzule.simplemail.simplemairsender; classe publique ProductPriceObserver implémente Observer {@Override public void Update (Obj observable, objet arg) {Product product = null; if (obj instanceof product) {product = (product) obj; } if (arg instanceof float) {float prix = (float) arg; Float DIMER = Product.getPrice () - Price; if (diminuer> 0) {// Envoyer un e-mail SimpleMailSender sms = MailSenderFactory .getSender (MailSenderType.Service); List <string> destinataires = new ArrayList <string> (); destinataire.add ("[email protected]"); destinataire.add ("[email protected]"); Essayez {pour (destinataire de la chaîne: destinataires) {sms.Send (destinataire, "Changement de prix", "articles auxquels vous faites attention à" + product.getName () + "Le prix a été réduit, de" + product.getprice () + "Yuan to" + prix + "yuan, la baisse atteinte" + diminution + "yuan rmb. }} catch (AddressException e) {e.printStackTrace (); } catch (MessageSingException e) {e.printStackTrace (); }}}}} 5. Vérifiez si l'e-mail a été envoyé avec succès.
Ce qui précède est l'ensemble du processus d'envoi de courriels Java, et j'espère que cela sera utile à l'apprentissage de tous.