欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java封裝好的mail包發(fā)送電子郵件的類

 更新時(shí)間:2016年01月12日 08:54:07   投稿:hebedich  
本文給大家分享了2個(gè)java封裝好的mail包發(fā)送電子郵件的類,并附上使用方法,小伙伴們可以根據(jù)自己的需求自由選擇。

下面代碼是利用Java mail包封裝了一個(gè)發(fā)送郵件的類

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class SendMail {
  private static final String MAIL_ADDRESS_REGEX = "^[\\w\\.=-]+@[\\w\\.-]+\\.[\\w]{2,3}$";

  private String mailServer;
  private String sender;
  private String[] receiver;

  public SendMail(){

  }

  public void setMailBasicInfo(String mailServer,String sender,String receiver){
    this.mailServer = mailServer;
    this.sender = sender;
    this.receiver =receiver.split(",");
  }

  public void setMailBasicInfo(String mailServer,String sender,String[] users){
    this.mailServer = mailServer;
    this.sender = sender;
    this.receiver = users;
  }

  public void setMailBasicInfo(String mailServer,String sender,List<String> users){
    this.mailServer = mailServer;
    this.sender = sender;
    this.receiver = new String[users.size()];
    users.toArray(this.receiver);
  }

  public boolean send(String subject, String content, List<String> fileNames)
  {
    subject = subject==null?"":subject;
    content = content==null?"":content;
    Properties props = new Properties();
    props.put("mail.smtp.host", mailServer);
    Session session = Session.getInstance(props, null);
    try
    {
      InternetAddress[] receiver = getReceiverList();
      if (receiver.length == 0)
      {
        System.out.println("receiver is null");
        return false;
      }
      MimeMessage msg = new MimeMessage(session);
      msg.setFrom(new InternetAddress(sender));
      msg.setRecipients(Message.RecipientType.TO, receiver);
      msg.setSubject(subject);
      msg.setSentDate(new Date());

      Multipart container = new MimeMultipart();
      MimeBodyPart textBodyPart = new MimeBodyPart();
      textBodyPart.setContent(content.toString(), "text/html;charset=gbk");
      container.addBodyPart(textBodyPart);

      doAttachFile(container,fileNames);
      msg.setContent(container);
      System.out.println("begin send mail");
      Transport.send(msg);
      System.out.println("send mail success");
    }
    catch (MessagingException e)
    {
      System.out.println("send mail fail");
      System.out.println(e);
      return false;
    }
    catch(Exception e){
      return false;
    }
    return true;
  }

  public boolean send(String subject, String content){
    return send(subject,content,null);
  }

  public boolean send(String subject){
    return send(subject,null);
  }

  private void doAttachFile(Multipart container, List<String> fileNames) throws MessagingException{
    if(fileNames==null || fileNames.size()==0)
      return;
    for(String filename:fileNames){
      File f = new File(filename);
      if(!f.isFile())
        continue;
      System.out.println("the attach file is:"+filename);
      MimeBodyPart fileBodyPart = new MimeBodyPart();
      FileDataSource fds = new FileDataSource(f);// 要發(fā)送的附件地址
      fileBodyPart.setDataHandler(new DataHandler(fds));
      fileBodyPart.setFileName(fds.getName());// 設(shè)置附件的名稱
      container.addBodyPart(fileBodyPart);
    }
  }

  private InternetAddress[] getReceiverList() throws AddressException
  {
    ArrayList<InternetAddress> toList = new ArrayList<InternetAddress>();
    for (int i = 0; i < receiver.length; ++i)
    {
      if (receiver[i].matches(MAIL_ADDRESS_REGEX))
      {
        toList.add(new InternetAddress(receiver[i]));
      }
    }

    return (InternetAddress[]) toList.toArray(new InternetAddress[toList.size()]);
  }
}

使用舉例

String host = "168.xx.xx.xx"; //郵件服務(wù)器的地址
String subject = "發(fā)送郵件的主題";
String sender = "test@gmail.com";
List<String> receivers = new ArrayList<String>();
receivers.add("user1@263.com");
receivers.add("user2@263.com");
String content = "郵件主題";
SendMail sendMail = new SendMail();
sendMail.setMailBasicInfo(host, sender, receivers);
sendMail.send(subject, content, null); //沒有附件

正文也可以是html內(nèi)容,如

String content = "<html>詳細(xì)信息:<a href='xxxx'>請(qǐng)點(diǎn)擊查看!</a></html>";

我們?cè)賮砜匆粋€(gè)封裝好的類

package com.message.base.email;
 
import com.message.base.spring.ApplicationHelper;
import com.message.base.utils.StringUtils;
import com.message.base.utils.ValidateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Properties;
 
/**
 * 發(fā)送郵件服務(wù)器.
 *
 * @author sunhao(sunhao.java@gmail.com)
 * @version V1.0, 13-3-25 上午6:19
 */
public class EmailServer {
  private static final Logger logger = LoggerFactory.getLogger(EmailServer.class);
  //spring中配置
  /**郵箱服務(wù)器配置**/
  private List<EmailConfig> config;
  /**是否開啟debug調(diào)試模式**/
  private boolean isDebug = false;
  /**是否啟用身份驗(yàn)證**/
  private boolean isAuth = true;
  /**驗(yàn)證類型**/
  private String authType = "auth";
 
  /**
   * 私有化默認(rèn)構(gòu)造器,使外部不可實(shí)例化
   */
  private EmailServer(){}
 
  /**
   * 單例,保證上下文中只有一個(gè)EmailServer
   *
   * @return EmailServer
   */
  public static EmailServer getInstance(){
    return ApplicationHelper.getInstance().getBean(EmailServer.class);
  }
 
  /**
   * 發(fā)送普通郵件(單個(gè)接收人)
   *
   * @param username   發(fā)件人用戶名
   * @param password   發(fā)件人密碼
   * @param title     郵件標(biāo)題
   * @param content    郵件正文
   * @param receiver   單個(gè)接收人
   * @return
   */
  public boolean sendTextMail(String username, String password, String title, String content, String receiver){
    return this.sendTextMail(username, password, title, content, Collections.singletonList(receiver));
  }
 
  /**
   * 發(fā)送普通郵件(多個(gè)接收人)
   *
   * @param username   發(fā)件人用戶名
   * @param password   發(fā)件人密碼
   * @param title     郵件標(biāo)題
   * @param content    郵件正文
   * @param receivers   多個(gè)接收人
   * @return
   */
  public boolean sendTextMail(String username, String password, String title, String content, List<String> receivers){
    Authentication auth = null;
    if(this.isAuth()){
      //如果需要身份認(rèn)證,則創(chuàng)建一個(gè)密碼驗(yàn)證器
      auth = new Authentication(username, password);
    }
 
    Properties props = new Properties();
    props.setProperty("mail.smtp.auth", this.isAuth() ? "true" : "false");
    props.setProperty("mail.transport.protocol", "auth");
    EmailConfig config = this.getEmailConfig(username);
    props.setProperty("mail.smtp.host", config.getSmtp());
    props.setProperty("mail.smtp.port", config.getPort() + "");
 
    // 根據(jù)郵件會(huì)話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
    Session session = Session.getDefaultInstance(props, auth);
    session.setDebug(this.isDebug);
 
    Message message = this.makeTextMail(session, title, content, username, receivers, false);
    try {
      Transport.send(message);
 
      return true;
    } catch (MessagingException e) {
      logger.error(e.getMessage(), e);
      return false;
    }
  }
 
  /**
   * 發(fā)送HTML郵件(單個(gè)接收人)
   *
   * @param username   發(fā)件人用戶名
   * @param password   發(fā)件人密碼
   * @param title     郵件標(biāo)題
   * @param content    郵件正文
   * @param receiver   單個(gè)接收人
   * @return
   */
  public boolean sendHtmlMail(String username, String password, String title, String content, String receiver){
    return this.sendHtmlMail(username, password, title, content, Collections.singletonList(receiver));
  }
 
  /**
   * 發(fā)送HTML郵件(多個(gè)接收人)
   *
   * @param username   發(fā)件人用戶名
   * @param password   發(fā)件人密碼
   * @param title     郵件標(biāo)題
   * @param content    郵件正文
   * @param receivers   多個(gè)接收人
   * @return
   */
  public boolean sendHtmlMail(String username, String password, String title, String content, List<String> receivers){
    Authentication auth = null;
    if(this.isAuth()){
      //如果需要身份認(rèn)證,則創(chuàng)建一個(gè)密碼驗(yàn)證器
      auth = new Authentication(username, password);
    }
 
    Properties props = new Properties();
    props.setProperty("mail.smtp.auth", this.isAuth() ? "true" : "false");
    props.setProperty("mail.transport.protocol", "auth");
    EmailConfig config = this.getEmailConfig(username);
    props.setProperty("mail.smtp.host", config.getSmtp());
    props.setProperty("mail.smtp.port", config.getPort() + "");
 
    // 根據(jù)郵件會(huì)話屬性和密碼驗(yàn)證器構(gòu)造一個(gè)發(fā)送郵件的session
    Session session = Session.getDefaultInstance(props, auth);
    session.setDebug(this.isDebug);
 
    Message message = this.makeTextMail(session, title, content, username, receivers, true);
    try {
      Transport.send(message);
 
      return true;
    } catch (MessagingException e) {
      logger.error(e.getMessage(), e);
      return false;
    }
  }
 
  /**
   * 獲取郵件服務(wù)器配置
   *
   * @param email     郵箱地址
   * @return
   */
  private EmailConfig getEmailConfig(String email){
    String mailServiceDomainName = this.getMailServiceDomainName(email);
    for(EmailConfig config : this.config) {
      if(config.getName().equals(mailServiceDomainName)){
        return config;
      }
    }
    return null;
  }
 
  /**
   * 創(chuàng)建郵件message
   *
   * @param session    根據(jù)配置獲得的session
   * @param title     郵件主題
   * @param content    郵件的內(nèi)容
   * @param from     發(fā)件者
   * @param receivers   收件者
   * @param isHtmlMail  是否是html郵件
   */
  private Message makeTextMail(Session session, String title, String content, String from, List<String> receivers, boolean isHtmlMail){
    Message message = new MimeMessage(session);
    try {
      /**標(biāo)題**/
      logger.info("this mail's title is {}", title);
      message.setSubject(title);
      /**內(nèi)容**/
      logger.info("this mail's content is {}", content);
      if(isHtmlMail){
        //是html郵件
        message.setContent(content, "text/html;charset=utf-8");
      } else {
        //普通郵件
        message.setText(content);
      }
      /**發(fā)件者地址**/
      logger.info("this mail's sender is {}", from);
      Address fromAddress = new InternetAddress(from);
      message.setFrom(fromAddress);
      /**接收者地址**/
      Address[] tos = new InternetAddress[receivers.size()];
      for(int i = 0; i < receivers.size(); i++){
        String receiver = receivers.get(i);
        if(ValidateUtils.isEmail(receiver)){
          tos[i] = new InternetAddress(receiver);
        }
      }
      /**發(fā)件時(shí)間**/
      message.setSentDate(new Date());
 
      message.setRecipients(Message.RecipientType.TO, tos);
    } catch (MessagingException e) {
      logger.error(e.getMessage(), e);
      e.printStackTrace();
    }
 
    return message;
  }
 
  /**
   * 獲取郵箱域名
   *
   * @param email   郵箱
   * @return
   */
  private String getMailServiceDomainName(String email){
    if(StringUtils.isEmpty(email)){
      return "";
    } else {
      int firstIndex = StringUtils.indexOf(email, "@");
      int secondIndex = StringUtils.lastIndexOf(email, ".");
 
      return StringUtils.substring(email, firstIndex + 1, secondIndex);
    }
  }
 
  public List<EmailConfig> getConfig() {
    return config;
  }
 
  public void setConfig(List<EmailConfig> config) {
    this.config = config;
  }
 
  public boolean isDebug() {
    return isDebug;
  }
 
  public void setDebug(boolean debug) {
    isDebug = debug;
  }
 
  public boolean isAuth() {
    return isAuth;
  }
 
  public void setAuth(boolean auth) {
    isAuth = auth;
  }
 
  public String getAuthType() {
    return authType;
  }
 
  public void setAuthType(String authType) {
    this.authType = authType;
  }
}

調(diào)用方式如下

public boolean sendMail() throws Exception {
  List<String> receivers = new ArrayList<String>();
  receivers.add("sunhao0550@163.com");
  receivers.add("sunhao0550@sina.cn");
  EmailServer.getInstance().sendHtmlMail("message_admin@163.com", "這里是密碼", "測(cè)試發(fā)送HTML郵件",
      "<span style='color: red;font-size: 20pt'>測(cè)試發(fā)送HTML郵件</span><a  target='_blank'>鏈接到百度</a>", receivers);
  return EmailServer.getInstance().sendTextMail("message_admin@163.com", "這里是密碼", "測(cè)試發(fā)送文本郵件",
      "測(cè)試發(fā)送文本郵件測(cè)試發(fā)送文本郵件測(cè)試發(fā)送文本郵件", receivers);
}

PS:正在考慮擴(kuò)展,如果把這幾個(gè)類封在jar包中,如何進(jìn)行郵件服務(wù)器配置的擴(kuò)展.

如有不好之處,歡迎拍磚.

相關(guān)文章

  • 用IDEA創(chuàng)建SpringBoot項(xiàng)目的詳細(xì)步驟記錄

    用IDEA創(chuàng)建SpringBoot項(xiàng)目的詳細(xì)步驟記錄

    Idea有著非常簡(jiǎn)便的Spring Boot新建過程,同時(shí)依靠pom自動(dòng)下載依賴,下面這篇文章主要給大家介紹了關(guān)于用IDEA創(chuàng)建SpringBoot項(xiàng)目的詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • JAVA實(shí)現(xiàn)遍歷文件夾下的所有文件(遞歸調(diào)用和非遞歸調(diào)用)

    JAVA實(shí)現(xiàn)遍歷文件夾下的所有文件(遞歸調(diào)用和非遞歸調(diào)用)

    本篇文章主要介紹了JAVA 遍歷文件夾下的所有文件(遞歸調(diào)用和非遞歸調(diào)用) ,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • java 集合----Map、Collection

    java 集合----Map、Collection

    HashSet 的 add() 方法添加集合元素時(shí)實(shí)際上轉(zhuǎn)變?yōu)檎{(diào)用 HashMap 的 put()方法來添加 key-value 對(duì)。HashMap 的 put() 方法.hashCode() 判斷返回值相等,如果返回值相等則再通過 equals 比較也返回 true,最終認(rèn)為key對(duì)象是相等的已經(jīng)在HashMap中存在。
    2016-04-04
  • IDEA 單元測(cè)試報(bào)錯(cuò):Class not found:xxxx springboot的解決

    IDEA 單元測(cè)試報(bào)錯(cuò):Class not found:xxxx springb

    這篇文章主要介紹了IDEA 單元測(cè)試報(bào)錯(cuò):Class not found:xxxx springboot的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Map 使用 Lambda 的 forEach 實(shí)現(xiàn)跳出循環(huán)操作

    Map 使用 Lambda 的 forEach 實(shí)現(xiàn)跳出循環(huán)操作

    這篇文章主要介紹了Map 使用 Lambda 的 forEach 實(shí)現(xiàn)跳出循環(huán)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java如何使用正則表達(dá)式從字符串中提取數(shù)字

    Java如何使用正則表達(dá)式從字符串中提取數(shù)字

    這篇文章主要介紹了Java如何使用正則表達(dá)式從字符串中提取數(shù)字問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • idea撤銷git?commit操作詳解

    idea撤銷git?commit操作詳解

    這篇文章主要為大家介紹了idea撤銷git?commit操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • Jmeter JDBC請(qǐng)求常見問題解決方案

    Jmeter JDBC請(qǐng)求常見問題解決方案

    這篇文章主要介紹了Jmeter JDBC請(qǐng)求常見問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • mybatis if test條件判斷語句中的判斷問題分析

    mybatis if test條件判斷語句中的判斷問題分析

    這篇文章主要介紹了mybatis if test條件判斷語句中的判斷問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn)

    ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn)

    這篇文章主要介紹了ssm 使用token校驗(yàn)登錄的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論