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

首頁 > 編程 > Java > 正文

Java封裝好的mail包發送電子郵件的類

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

下面代碼是利用Java mail包封裝了一個發送郵件的類

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);// 要發送的附件地址      fileBodyPart.setDataHandler(new DataHandler(fds));      fileBodyPart.setFileName(fds.getName());// 設置附件的名稱      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"; //郵件服務器的地址String subject = "發送郵件的主題";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內容,如

String content = "<html>詳細信息:<a href='xxxx'>請點擊查看!</a></html>";

我們再來看一個封裝好的類

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; /** * 發送郵件服務器. * * @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中配置  /**郵箱服務器配置**/  private List<EmailConfig> config;  /**是否開啟debug調試模式**/  private boolean isDebug = false;  /**是否啟用身份驗證**/  private boolean isAuth = true;  /**驗證類型**/  private String authType = "auth";   /**   * 私有化默認構造器,使外部不可實例化   */  private EmailServer(){}   /**   * 單例,保證上下文中只有一個EmailServer   *   * @return EmailServer   */  public static EmailServer getInstance(){    return ApplicationHelper.getInstance().getBean(EmailServer.class);  }   /**   * 發送普通郵件(單個接收人)   *   * @param username   發件人用戶名   * @param password   發件人密碼   * @param title     郵件標題   * @param content    郵件正文   * @param receiver   單個接收人   * @return   */  public boolean sendTextMail(String username, String password, String title, String content, String receiver){    return this.sendTextMail(username, password, title, content, Collections.singletonList(receiver));  }   /**   * 發送普通郵件(多個接收人)   *   * @param username   發件人用戶名   * @param password   發件人密碼   * @param title     郵件標題   * @param content    郵件正文   * @param receivers   多個接收人   * @return   */  public boolean sendTextMail(String username, String password, String title, String content, List<String> receivers){    Authentication auth = null;    if(this.isAuth()){      //如果需要身份認證,則創建一個密碼驗證器      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() + "");     // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的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;    }  }   /**   * 發送HTML郵件(單個接收人)   *   * @param username   發件人用戶名   * @param password   發件人密碼   * @param title     郵件標題   * @param content    郵件正文   * @param receiver   單個接收人   * @return   */  public boolean sendHtmlMail(String username, String password, String title, String content, String receiver){    return this.sendHtmlMail(username, password, title, content, Collections.singletonList(receiver));  }   /**   * 發送HTML郵件(多個接收人)   *   * @param username   發件人用戶名   * @param password   發件人密碼   * @param title     郵件標題   * @param content    郵件正文   * @param receivers   多個接收人   * @return   */  public boolean sendHtmlMail(String username, String password, String title, String content, List<String> receivers){    Authentication auth = null;    if(this.isAuth()){      //如果需要身份認證,則創建一個密碼驗證器      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() + "");     // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的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;    }  }   /**   * 獲取郵件服務器配置   *   * @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;  }   /**   * 創建郵件message   *   * @param session    根據配置獲得的session   * @param title     郵件主題   * @param content    郵件的內容   * @param from     發件者   * @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 {      /**標題**/      logger.info("this mail's title is {}", title);      message.setSubject(title);      /**內容**/      logger.info("this mail's content is {}", content);      if(isHtmlMail){        //是html郵件        message.setContent(content, "text/html;charset=utf-8");      } else {        //普通郵件        message.setText(content);      }      /**發件者地址**/      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);        }      }      /**發件時間**/      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;  }}

調用方式如下

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", "這里是密碼", "測試發送HTML郵件",      "<span style='color: red;font-size: 20pt'>測試發送HTML郵件</span><a  target='_blank'>鏈接到百度</a>", receivers);  return EmailServer.getInstance().sendTextMail("message_admin@163.com", "這里是密碼", "測試發送文本郵件",      "測試發送文本郵件測試發送文本郵件測試發送文本郵件", receivers);}

PS:正在考慮擴展,如果把這幾個類封在jar包中,如何進行郵件服務器配置的擴展.

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东丽区| 郸城县| 宝鸡市| 临夏市| 乡宁县| 军事| 漾濞| 定陶县| 黔江区| 福贡县| 郓城县| 内黄县| 南平市| 峨眉山市| 无为县| 巩义市| 桃园市| 开鲁县| 镇沅| 澄迈县| 泉州市| 鲜城| 澄城县| 金华市| 竹北市| 威海市| 和政县| 达孜县| 虞城县| 改则县| 仙游县| 商河县| 上杭县| 凤阳县| 万山特区| 贵州省| 东乌珠穆沁旗| 九龙县| 徐州市| 卢氏县| 屯昌县|