Java Mail ist ein Tool, das vorhandene E -Mail -Konten zum Senden von E -Mails verwendet. Zum Beispiel registriere ich ein E -Mail -Konto mit NetEase. Durch die Steuerung von Java Mail kann ich mich nicht persönlich bei Netase -Mailbox anmelden, damit das Programm automatisch NetEase -Mailbox zum Senden von E -Mails verwenden kann. Dieser Mechanismus wird häufig bei der Registrierungsaktivierung und beim Senden von Spam verwendet.
Der allgemeine Prozess des Sendens von Java Mail lautet wie folgt:
1. Erstellen Sie eine bestimmte Klasse, die von javax.mail.authenticator geerbt wurde, und überschreiben Sie die GetPasswordAuthentication () -Methode im Inneren. Diese Klasse wird als Anmeldeverifizierung verwendet, um sicherzustellen, dass Sie das Recht haben, E -Mails an diesen Postfach zu senden.
2. Erstellen Sie eine Eigenschaftendatei, die Parameter wie SMTP -Serveradresse speichert.
3. Erstellen Sie eine javax.mail.session über die erstellte Eigenschaftendatei und die konkrete Klasse von Javax.mail.Authenticator. Die Erstellung einer Sitzung entspricht der Anmeldung bei der E -Mail -Adresse. Der Rest ist natürlich eine neue E -Mail.
4. Um den E -Mail -Inhalt zu erstellen, handelt es sich im Allgemeinen um ein javax.mail.internet.mimemessage -Objekt und geben Sie den Absender, den Empfänger, den Betreff, den Inhalt usw. an.
5. Verwenden Sie die Toolklasse von Javax.mail.Transport, um E -Mails zu senden.
Im Folgenden finden Sie den Code, den ich eingekapselt habe, und die Kommentare sind ebenfalls sehr detailliert.
1. Erstens ist es eine bestimmte Klasse, die von javax.mail.authenticator geerbt wurde. Die Methode von GetPasswordAuthentication () besteht darin, ein PasswortAuthentication -Objekt zu erstellen und es zurückzugeben, was ein wenig verwirrend ist, um die Designabsichten von Java Mail zu verstehen. Es kann sein, dass javax.mail.authenticator uns zusätzliche Überprüfungsmaßnahmen zur Gewährleistung der Sicherheit bietet.
Paket com.mkon.Simplemail; import Javax.mail.Authenticator; Import Javax.mail.PasswordAuthentication; /** * Server -Mailbox -Anmeldeverifizierung * * @Author Mzule * * */public class MailAuthenticator erweitert den Authenticator {/** * Benutzername (Login Mailbox) */private String -Benutzername; / *** Passwort*/ privates Zeichenfolge Passwort; / *** Mailbox und Passwort initialisieren** @param userername mailbox* @param password Passwort*/ public MailAuthenticator (String -Benutzername, String -Passwort) {this.username = userername; this.Password = Passwort; } String getPassword () {Kennwort zurückgeben; } @Override Protected PasswordAuthentication getPasswordAuthentication () {Neue PasswordAuthentication (Benutzername, Passwort); } String getUnername () {return userername; } public void setPassword (String -Passwort) {this.password = password; } public void setUnername (String -Benutzername) {this.username = userername; }}2. E -Mail -Senden der Klasse , die verbleibenden Schritte werden in dieser Klasse implementiert. SimpleMail im Code ist ein Pojo, das das Thema und den Inhalt der E -Mail enthält. Ich bin der Meinung, dass es nicht angemessen ist, sowohl Themen als auch Inhalt in einen Methodeparameter einzubeziehen, daher habe ich diese Methode überladen. Da die SMTP -Serveradressen der meisten Mailboxen durch E -Mail -Adressen berechnet werden können. Der Einfachheit halber wird ein Konstruktor für eine SMTP -Serveradresse angegeben.
Paket com.mkon.Simplemail; Import Java.util.List; Import Java.util.Properties; import Javax.mail.MessagingException; import Javax.mail /*** Einfacher Mail -Absender kann in einzelnen oder Massen gesendet werden. * * @Author Mzule * * */öffentliche Klasse SimpleMailSender {/** * Props -Datei zum Senden von E -Mails */private endgültige transiente Eigenschaften props = System.getProperties (); / *** Mailserver Anmeldeverifizierung*/ private transiente MailAuthenticator Authenticator; / ** * E -Mail -Sitzung */ private transiente Sitzung; / ** * Initialisieren Sie den Mail -Absender * * @param SMTPHOSTNAME * SMTP -Mail -Server -Adresse * @param Benutzername * Benutzername (Adresse) zum Senden von E -Mails * @param Passwort * Passwort zum Senden von E -Mails */ public SimplemailSender (endgültiger String SMTPhostName, endgültiger String -Benutzername, endgültiger String -Passwort) {initname (Username, Passwort, Passwort, Passwort, Passwort, Passwort, Passwort, Passwort). } /*** Initialisieren Sie den E -Mail -Absender** @param userername* Benutzername (Adresse) der E -Mail -Senden von E -Mails und verwenden Sie diese, um die SMTP -Serveradresse zu beheben* @param Passwort* Passwort zum Senden von E -Mails* /public simimailSender (endgültige String -Benutzername, endgültige String -Kennwort) {// Die SMTP -SMTP -SMTP -SMTP -SMTP -SMTP -SMTP -Adresse. + userername.split ("@") [1]; Init (Benutzername, Passwort, SMTPhostName); } / ** * Initialisierung * * @param userername * Benutzername (Adresse) zum Senden der E -Mail * @param Passwort * Passwort * @param SMTPHOSTNAME * SMTP -HOST -Adresse * / private void init (String -Benutzername, String -Passwort, String SMTPHOSTNAME) {// initialize props props.puts ("mail.smtp.Auth", "True". props.put ("mail.smtp.host", SMTPhostName); // prüfen Sie Authenticator = neuer MailAuthenticator (Benutzername, Passwort); // Session = session.getInstance (Requisiten, Authenticator) erstellen; } / ** * E -Mail senden * * @param -Empfänger * Empfänger -E -Mail -Adresse * @param Betreff * E -Mail -Betreff * @param Inhalt * E -Mail -Inhalt * @throwsException * @throws MessagingException * / public void send (String -Empfänger, String -Betreff, Objektinhalt). // Setze Sender Message.setFrom (neue InternetDress (Authenticator.getUername ())); // Empfängermeldung setze. // themenmeldung festlegen.Setsubject (Betreff); // Setzen Sie die Nachrichteninhaltsnachricht. // Transport.Send (Nachricht); } / ** * Bulk -E -Mail * * @param -Empfänger * Empfänger * @param Betreff * Betreff * @param Inhalt * Inhalt * Inhalt * @throw adressException * @throws MessagingException * / public void send (list <string> Empfänger, String -Betreff, Objektinhalt), löscht die Adress -Ausnahme, MessagingException {// MIME -SEMPT -MIME -MIMEMESSAGE MIMEMESSAGE MESMESSAGE MESSAGE (MIMEMESSAGE CREATE). // Setzen Sie die Absendermeldung. // Setzen Sie den Empfänger endgültig int num = Empfänger.size (); InternetAddress [] adresses = new InternetAddress [num]; für (int i = 0; i <num; i ++) {adresses [i] = new InternetDress (Empfänger.get (i)); } message.setRecipients (Empfängertype.to, Adressen); // Setzen Sie die Themenmeldung.Setsubject (Betreff); // Setzen Sie die Mail-Inhaltsnachricht. // Transport.Send (Nachricht); } / ** * E -Mail senden * * @param -Empfänger * Empfänger -E -Mail -Adresse * @param Mail * Mail -Objekt * @throws adresceException * @throws MessagingException * / public void send (String -Empfänger, SimpleMail Mail) löst adresz. } / ** * Bulk -E -Mail * * @param -Empfänger * Empfänger * @param Mail * Mail -Objekt * @throws adressException * @throws MessagingException * / public void send (list <string> Empfänger, SimpleMail Mail) löscht die Adresse und MessagingException (Empfänger, mail.getSubject (), mail.getContent (); }}3. Wenn Sie den obigen Postfach -Absender aufrufen, können Sie eine Fabrikklasse erstellen . Die Fabrikklasse kann den Erstellungsprozess zusammenfassen. Daher wird es sehr bequem, den Mailbox -Benutzernamen durch Lesen der Konfigurationsdatei zu erhalten. Der folgende Code wurde geschrieben, als ich den Observer -Modus schrieb, und er zeigte nur kurz die Fabrikklasse.
Paket com.mzule.dp.observer.factory; com.mzule.dp.observer.constant.mailSenderType; import com.mzule.simplemail.SimplemailSender; /*** OUTBOX Factory** @Author MZULE**/public class MailSenderFactory {/*** Service Mailbox*/private static SimpleMailSender Servicesms = null; / *** mailBox erhalten** @param type mailbox type* @return mailbox, der dem Typ entspricht } return servicesms; } return null; }}V.
Paket com.mzule.dp.observer.observer; Import Java.util.ArrayList; Import Java.util.List; Import Java.util.Observable; Import Java.util.Observable; com.mzule.dp.observer.constant.mailSenderType; import com.mzule.dp.observer.factory.mailsenderfactory; import com.mzule.dp.observer.po.Product; public class ProductPriceObServer implementiert Observer {@Override public void Update (Beobachtbar OBJ, Objekt arg) {product product = null; if (obj instanceof product) {product = (product) obj; } if (arginstanceof float) {float price = (float) arg; Float detrrease = product.getPrice () - Preis; if (minderung> 0) {// E -Mail SimpleMailSender SMS = MailSenderFactory .GetSender (MailSenderType.Service); List <String> recurenten = new ArrayList <string> (); recurients.add ("[email protected]"); recurients.add ("[email protected]"); Versuchen Sie {für (String -Empfänger: Empfänger) {sms.send (Empfänger, "Preisänderung", "Artikel, auf die Sie" + product.getName () + "Der Preis wurde reduziert, von" + product.getPrice () + "yuan bis" + preis + "yuan, der Rückgang erreicht" + Decrease + "Yuan Rmb. }} catch (adressException e) {e.printstacktrace (); } catch (MessagingException e) {e.printstacktrace (); }}}}} 5. Überprüfen Sie, ob die E -Mail erfolgreich gesendet wurde.
Das obige ist der gesamte Prozess des Sendens von Java -E -Mails, und ich hoffe, dass es für das Lernen aller hilfreich sein wird.