Java完成簡略郵件發送。本站提示廣大學習愛好者:(Java完成簡略郵件發送)文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成簡略郵件發送正文
JAVA MAIL是應用現有的郵件賬戶發送郵件的對象,好比說,我在網易注冊一個郵箱賬戶,經由過程JAVA Mail的操控,我可以不親身登錄網易郵箱,讓法式主動的應用網易郵箱發送郵件。這一機制被普遍的用在注冊激活和渣滓郵件的發送等方面。
Java郵件發送的年夜致進程是如許的:
1、構建一個繼續自javax.mail.Authenticator的詳細類,偏重寫外面的getPasswordAuthentication()辦法。此類是用作登錄校驗的,以確保你對該郵箱有發送郵件的權力。
2、構建一個properties文件,該文件中寄存SMTP辦事器地址等參數。
3、經由過程構建的properties文件和javax.mail.Authenticator詳細類來創立一個javax.mail.Session。Session的創立,就相當於登錄郵箱一樣。剩下的天然就是新建郵件。
4、構建郵件內容,普通是javax.mail.internet.MimeMessage對象,並指定發送人,收信人,主題,內容等等。
5、應用javax.mail.Transport對象類發送郵件。
上面是我封裝的代碼,正文也比擬具體。
1、起首是繼續自javax.mail.Authenticator的一個詳細類。getPasswordAuthentication()辦法也就是構建一個PasswordAuthentication對象並前往,有點隱晦JAVA Mail如許的設計意圖,能夠是javax.mail.Authenticator為我們供給了附加的包管平安的驗證辦法吧。
package com.mzule.simplemail; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; /** * 辦事器郵箱登錄驗證 * * @author MZULE * */ public class MailAuthenticator extends Authenticator { /** * 用戶名(登錄郵箱) */ private String username; /** * 暗碼 */ private String password; /** * 初始化郵箱和暗碼 * * @param username 郵箱 * @param password 暗碼 */ public MailAuthenticator(String username, String password) { this.username = username; this.password = password; } String getPassword() { return password; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } String getUsername() { return username; } public void setPassword(String password) { this.password = password; } public void setUsername(String username) { this.username = username; } }
2、郵件發送類,剩下的步調都是在這個類完成的。代碼中的SimpleMail是封裝了郵件主題和內容的一個POJO。認為在一個辦法參數中既包括主題又包括內容,不太適合,故重載了此辦法。還有就是由於年夜多半郵箱的SMTP辦事器地址都是可以經由過程郵箱地址算出來,簡略起見,供給了一個不須要SMTP辦事器地址的結構器。
package com.mzule.simplemail; import java.util.List; import java.util.Properties; import 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.MimeMessage; import javax.mail.internet.MimeMessage.RecipientType; /** * 簡略郵件發送器,可單發,群發。 * * @author MZULE * */ public class SimpleMailSender { /** * 發送郵件的props文件 */ private final transient Properties props = System.getProperties(); /** * 郵件辦事器登錄驗證 */ private transient MailAuthenticator authenticator; /** * 郵箱session */ private transient Session session; /** * 初始化郵件發送器 * * @param smtpHostName * SMTP郵件辦事器地址 * @param username * 發送郵件的用戶名(地址) * @param password * 發送郵件的暗碼 */ public SimpleMailSender(final String smtpHostName, final String username, final String password) { init(username, password, smtpHostName); } /** * 初始化郵件發送器 * * @param username * 發送郵件的用戶名(地址),並以此解析SMTP辦事器地址 * @param password * 發送郵件的暗碼 */ public SimpleMailSender(final String username, final String password) { //經由過程郵箱地址解析出smtp辦事器,對年夜多半郵箱都管用 final String smtpHostName = "smtp." + username.split("@")[1]; init(username, password, smtpHostName); } /** * 初始化 * * @param username * 發送郵件的用戶名(地址) * @param password * 暗碼 * @param smtpHostName * SMTP主機地址 */ private void init(String username, String password, String smtpHostName) { // 初始化props props.put("mail.smtp.auth", "true"); props.put("mail.smtp.host", smtpHostName); // 驗證 authenticator = new MailAuthenticator(username, password); // 創立session session = Session.getInstance(props, authenticator); } /** * 發送郵件 * * @param recipient * 收件人郵箱地址 * @param subject * 郵件主題 * @param content * 郵件內容 * @throws AddressException * @throws MessagingException */ public void send(String recipient, String subject, Object content) throws AddressException, MessagingException { // 創立mime類型郵件 final MimeMessage message = new MimeMessage(session); // 設置發信人 message.setFrom(new InternetAddress(authenticator.getUsername())); // 設置收件人 message.setRecipient(RecipientType.TO, new InternetAddress(recipient)); // 設置主題 message.setSubject(subject); // 設置郵件內容 message.setContent(content.toString(), "text/html;charset=utf-8"); // 發送 Transport.send(message); } /** * 群發郵件 * * @param recipients * 收件人們 * @param subject * 主題 * @param content * 內容 * @throws AddressException * @throws MessagingException */ public void send(List<String> recipients, String subject, Object content) throws AddressException, MessagingException { // 創立mime類型郵件 final MimeMessage message = new MimeMessage(session); // 設置發信人 message.setFrom(new InternetAddress(authenticator.getUsername())); // 設置收件人們 final int num = recipients.size(); InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { addresses[i] = new InternetAddress(recipients.get(i)); } message.setRecipients(RecipientType.TO, addresses); // 設置主題 message.setSubject(subject); // 設置郵件內容 message.setContent(content.toString(), "text/html;charset=utf-8"); // 發送 Transport.send(message); } /** * 發送郵件 * * @param recipient * 收件人郵箱地址 * @param mail * 郵件對象 * @throws AddressException * @throws MessagingException */ public void send(String recipient, SimpleMail mail) throws AddressException, MessagingException { send(recipient, mail.getSubject(), mail.getContent()); } /** * 群發郵件 * * @param recipients * 收件人們 * @param mail * 郵件對象 * @throws AddressException * @throws MessagingException */ public void send(List<String> recipients, SimpleMail mail) throws AddressException, MessagingException { send(recipients, mail.getSubject(), mail.getContent()); } }
3、挪用下面的郵箱發送器,可以構建一個工場類,工場類可以封裝創立的進程,所以經由過程讀設置裝備擺設文件獲得郵箱用戶名,暗碼都邑變得非常便利。上面的代碼是我在寫不雅察者形式的時刻寫的,只是簡略演示了工場類。
package com.mzule.dp.observer.factory; import com.mzule.dp.observer.constant.MailSenderType; import com.mzule.simplemail.SimpleMailSender; /** * 發件箱工場 * * @author MZULE * */ public class MailSenderFactory { /** * 辦事郵箱 */ private static SimpleMailSender serviceSms = null; /** * 獲得郵箱 * * @param type 郵箱類型 * @return 相符類型的郵箱 */ public static SimpleMailSender getSender(MailSenderType type) { if (type == MailSenderType.SERVICE) { if (serviceSms == null) { serviceSms = new SimpleMailSender("[email protected]", "hidden"); } return serviceSms; } return null; } }
4、發送郵件,照樣不雅察者形式DEMO外面的代碼,呼呼。
package com.mzule.dp.observer.observer; import java.util.ArrayList; import java.util.List; 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.SimpleMailSender; public class ProductPriceObserver implements Observer { @Override public void update(Observable obj, Object arg) { Product product = null; if (obj instanceof Product) { product = (Product) obj; } if (arg instanceof Float) { Float price = (Float) arg; Float decrease = product.getPrice() - price; if (decrease > 0) { // 發送郵件 SimpleMailSender sms = MailSenderFactory .getSender(MailSenderType.SERVICE); List<String> recipients = new ArrayList<String>(); recipients.add("[email protected]"); recipients.add("[email protected]"); try { for (String recipient : recipients) { sms.send(recipient, "價錢更改", "您存眷的物品" + product.getName() + "降價了,由" + product.getPrice() + "元降到" + price + "元,降幅達" + decrease + "元國民幣。趕緊購物吧。"); } } catch (AddressException e) { e.printStackTrace(); } catch (MessagingException e) { e.printStackTrace(); } } } } }
5、檢查郵件能否發送勝利了。
以上就是java郵件發送的全體進程,願望對年夜家的進修有所贊助。