日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java Mail郵件發送如何實現簡單封裝

瀏覽:188日期:2022-08-21 14:21:34

首先每次發送需要配置的東西很多,包括發件人的郵箱和密碼、smtp服務器和SMTP端口號等信息。其次,沒有將發送和郵件內容相分離。按照單一職責原則,應該有且僅有一個原因引起類的變更[1]。最后一個問題是,我們的代碼不僅自己用,也很可能讓別人調用。別人調用的時候不想去了解郵件發送的細節,調用的人只想傳盡量少的參數獲得預期的效果。因此讓Demo變成可以使用的代碼需要我們重新設計代碼的結構。

從Demo中我們可以抽象出兩種類型的POJO,也就是發件人和郵件。你可能會問收件人怎么辦?收件人可以跟郵件POJO放在一起嗎?

仔細思考下我們就知道,郵件和收件人應該是分開的。因為如果郵件和收件人放在一起,那么就意味著我的一封郵件只能發送給特定的人了,而實際上我們會把相同的郵件發送給不同的收件人。因此收件人只要作為發送時的參數就可以了。

1.發件人POJO

/** * @Title: MailAuthenticator * @author: ykgao * @description: * @date: 2017-10-11 下午04:55:37 */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.郵件POJO

用于存儲郵件主題和內容。

/** * @Title: SimpleMail * @author: ykgao * @description: * @date: 2017-10-11 下午04:56:27 */public class SimpleMail {/** 郵件主題 */public String Subject;/** 郵件內容 */public String Content;/** * @return the subject */public String getSubject() {return Subject;}/** * @param subject * the subject to set */public void setSubject(String subject) {Subject = subject;}/** * @return the content */public String getContent() {return Content;}/** * @param content * the content to set */public void setContent(String content) {Content = content;}}

3.郵件發送

設計好了POJO,我們現在需要當然是發送郵件了。在Demo中我們需要配置SMTP服務器,但是我們使用郵箱發送郵件的時候并不需要填寫SMTP服務器。其實SMTP服務器大多數的格式是:smtp.emailType.com。此處emailType 就是你的郵箱類型也就是@后面跟的名稱。比如163郵箱就是163。不過這個方法也不是萬能的,因為outlook郵箱的smtp服務器就不是這個格式,而是smtp-mail.outlook.com ,所以我單獨為outlook郵箱寫了個例外。

我們還需要群分郵件的功能。這個設計起來很容易,只需要一個單人發送的重載方法,其收件人的參數可以是一個List。為了減少接口的參數個數,我們把SMTP端口默認為587。

import java.io.UnsupportedEncodingException;import java.security.GeneralSecurityException;import java.util.List;import java.util.Properties;import javaMailDevelopment.SimpleMail;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;import com.sun.mail.util.MailSSLSocketFactory;/** * @Title: SimpleMailSender * @author: ykgao * @description: 郵件發送器 * @date: 2017-10-11 下午04:54:50 */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服務器,對大多數郵箱都管用String smtpHostName = 'smtp.' + username.split('@')[1];if (username.split('@')[1].equals('outlook.com')) {smtpHostName = 'smtp-mail.outlook.com';}init(username, password, smtpHostName);}/** * 初始化 * * @param username * 發送郵件的用戶名(地址) * @param password * 密碼 * @param smtpHostName * SMTP主機地址 */private void init(String username, String password, String smtpHostName) {// 初始化propsprops.setProperty('mail.transport.protocol', 'smtp'); // 使用的協議(JavaMail規范要求)props.setProperty('mail.smtp.host', smtpHostName); // 發件人的郵箱的 SMTP 服務器地址props.setProperty('mail.smtp.auth', 'true'); // 需要請求認證final String smtpPort = '587';props.setProperty('mail.smtp.port', smtpPort);// props.setProperty('mail.smtp.socketFactory.class',// 'javax.net.ssl.SSLSocketFactory');props.setProperty('mail.smtp.socketFactory.fallback', 'false');props.setProperty('mail.smtp.starttls.enable', 'true');props.setProperty('mail.smtp.socketFactory.port', smtpPort);// 驗證authenticator = new MailAuthenticator(username, password);// 創建sessionsession = Session.getInstance(props, authenticator);session.setDebug(true);}/** * 發送郵件 * * @param recipient * 收件人郵箱地址 * @param subject * 郵件主題 * @param content * 郵件內容 * @throws AddressException * @throws MessagingException * @throws UnsupportedEncodingException */public void send(String recipient, String subject, Object content) throws Exception {// 創建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 @throws */public void send(String recipient, SimpleMail mail) throws Exception {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());}}

4.測試代碼

代碼寫完了,現在需要測試下代碼是否可行。

import java.util.ArrayList;import java.util.List;/** * @Title: testMail * @author: ykgao * @description: * @date: 2017-10-11 下午02:13:02 * */public class testMail {public static void main(String[] args) throws Exception { /** 創建一個郵件發送者*/SimpleMailSender simpleMailSeJava Mail 郵件發送簡單封裝

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品国产www456c0m| 久久99青青| 精品欧美日韩精品| 国产精品久久久久久久久久久久久久久 | 国产99亚洲| 国产精品国产三级在线观看| 成人在线超碰| 久久在线电影| 99精品在线观看| 福利一区二区三区视频在线观看| 久久精品国产网站| 久久亚洲精精品中文字幕| 欧美另类中文字幕 | 亚洲涩涩在线| 啪啪国产精品| 四虎成人精品一区二区免费网站| 青青草91久久久久久久久| 国产精品多人| 久久中文在线| 91精品韩国| 日本中文字幕一区二区| 国产九一精品| 岛国av在线网站| 久久九九国产| 久久精品天堂| 国产亚洲午夜| 久久精品国产成人一区二区三区| 国产精区一区二区| 亚洲a在线视频| 国产精品nxnn| 亚洲一级在线| 日韩精品1区2区3区| 国产精品国码视频| 亚洲伊人精品酒店| 综合日韩av| 午夜电影一区| 国产在线一区不卡| 视频一区二区中文字幕| 国产精品白丝一区二区三区| 精品一区二区男人吃奶| 欧美福利专区| 欧美特黄一级大片| 久久久久亚洲精品中文字幕| 久久伊人久久| 五月天综合网站| 日韩在线短视频| 国产精品3区| 青青草国产成人99久久| 日韩高清不卡| 久久激情五月婷婷| 日韩高清不卡在线| 亚洲精品少妇| 99在线|亚洲一区二区| 超级白嫩亚洲国产第一| 国产亚洲人成a在线v网站 | 91久久亚洲| 麻豆精品视频在线观看| 欧美精品国产一区| 欧美搞黄网站| 免费在线亚洲欧美| 日本少妇精品亚洲第一区| 少妇高潮一区二区三区99| 亚洲另类黄色| 亚洲综合五月| 午夜精品婷婷| 国产字幕视频一区二区| 激情视频网站在线播放色| 精品国产a一区二区三区v免费| 欧美国产日本| 国产一区二区三区亚洲| 国产精品亚洲一区二区在线观看| 欧美va天堂| 黄色不卡一区| 日本h片久久| 国产情侣一区在线| 精品国产乱码久久久| 国产精品一区二区免费福利视频| 香蕉久久一区| 国产日韩中文在线中文字幕| 精品三级在线观看视频| 久久久久久久久久久9不雅视频| 四虎影视精品| av在线日韩| 午夜免费一区| 亚洲人www| 久久电影tv| 免费精品视频最新在线| 91国内精品| 国产一区二区三区自拍| 欧美va天堂在线| 亚洲无线观看| 精品黄色一级片| av综合电影网站| 五月激激激综合网色播 | 不卡中文一二三区| 在线精品一区| 三上亚洲一区二区| 久久久久久久久久久妇女| 美女尤物久久精品| 精品一区91| 亚洲精品少妇| 国产精品97| 快播电影网址老女人久久| 精品国产乱码久久久久久樱花| 日本免费一区二区视频| 男人操女人的视频在线观看欧美| 欧美日韩第一| 欧美另类专区| 久久久久久黄| 欧美日韩视频一区二区三区| 欧美一区二区三区高清视频| 成人精品中文字幕| 99视频精品全部免费在线视频| 精品成av人一区二区三区| 麻豆极品一区二区三区| 日本国产亚洲| 美女国产精品久久久| 精品一区二区三区免费看| 成人日韩av| 久久久久99| 亚洲欧美日韩综合国产aⅴ| 日韩影院在线观看| 日韩高清在线不卡| 荡女精品导航| 午夜在线播放视频欧美| 蜜桃视频一区二区三区 | 亚久久调教视频| 日韩不卡一二三区| 国产精品尤物| 日韩欧美一区二区三区在线视频 | 麻豆中文一区二区| 欧美精品国产白浆久久久久| 蜜臀av一区二区三区| 日韩影院在线观看| 88久久精品| 久久精品免费看| 正在播放日韩精品| 99热精品久久| 欧美成人高清| 亚洲欧美久久久| 一区二区三区午夜视频| 在线精品福利| 国产精品一区二区av交换| 久久精品一区二区三区中文字幕| 久久av超碰| 亚洲男女av一区二区| 涩涩涩久久久成人精品| 国产精品一区二区免费福利视频| 精品国产中文字幕第一页| 久久天堂精品| 亚洲久草在线| 91麻豆国产自产在线观看亚洲| 国产综合亚洲精品一区二| 久久久久久久久丰满| 日本亚州欧洲精品不卡| 久久国产尿小便嘘嘘| 久久久成人网| 91九色综合| 在线日韩av| 国产精品66| 免费在线成人网| 另类欧美日韩国产在线| 久久大逼视频| 成人在线超碰| 羞羞答答国产精品www一本| 给我免费播放日韩视频| 亚洲在线一区| 日韩不卡一区| 蜜臀国产一区二区三区在线播放| 精品久久97| 日本在线视频一区二区| 亚洲成人一区在线观看| 欧美一区成人| 在线精品视频在线观看高清| 国产精品久久久久久久久久白浆| 天堂а√在线最新版中文在线| 人人爱人人干婷婷丁香亚洲| 免费久久久久久久久| 精品美女视频 | 日韩在线成人| 在线日韩视频| 日韩欧美一区免费| 久久久精品区| 国产精品色在线网站| 亚洲欧美在线专区| 亚洲婷婷免费| 久久精品91| 国产麻豆久久| 久久精品亚洲欧美日韩精品中文字幕| 另类欧美日韩国产在线| 国产精品免费大片| 久久国产婷婷国产香蕉| 日韩一二三区在线观看| 日韩欧美久久| 丝瓜av网站精品一区二区| 午夜在线观看免费一区| 日韩中文字幕1| 日本中文字幕不卡| 国产精品亚洲欧美日韩一区在线| 日韩不卡一二三区|