国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java實現簡單郵件發送

2019-11-26 14:31:54
字體:
來源:轉載
供稿:網友

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("invisible@126.com",      "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("invisible@qq.com");    recipients.add("invisible@gmail.com");    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郵件發送的全部過程,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临安市| 克东县| 河津市| 睢宁县| 邵阳市| 元朗区| 镶黄旗| 宿迁市| 尖扎县| 张家港市| 汝阳县| 绥化市| 达日县| 磐安县| 太谷县| 垫江县| 墨脱县| 棋牌| 轮台县| 三原县| 桑日县| 丹棱县| 历史| 游戏| 鹤庆县| 莱西市| 峡江县| 隆化县| 桦川县| 阿克苏市| 莫力| 保定市| 白城市| 蓝山县| 玉屏| 越西县| 叶城县| 方山县| 潍坊市| 宿迁市| 通许县|