程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java完成簡略郵件發送

Java完成簡略郵件發送

編輯:關於JAVA

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郵件發送的全體進程,願望對年夜家的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved