• 网上图书商城项目学习笔记-005邮件辅助类


    邮件辅助类

    一、使用方法

    在servlet层中调用UserService.java

     1     public void regist(User user) {
     2         //1. 数据的补齐
     3         user.setUid(CommonUtils.uuid());
     4         user.setStatus(false);
     5         user.setActivationCode(CommonUtils.uuid() + CommonUtils.uuid());
     6         
     7         //2. 向数据库插入
     8         try {
     9             userDao.add(user);
    10         } catch (SQLException e) {
    11             throw new RuntimeException(e);
    12         }
    13         
    14         //3. 发邮件
    15         //3.1 把配置文件内容加载到prop中
    16         Properties prop = new Properties();
    17         try {
    18             prop.load(this.getClass().getClassLoader().getResourceAsStream("email_template.properties"));
    19         } catch (IOException e) {
    20             throw new RuntimeException(e);
    21         }
    22         //3.2  登录邮件服务器,得到session
    23         String host = prop.getProperty("host");
    24         String username = prop.getProperty("username");
    25         String password = prop.getProperty("password");
    26         Session session = MailUtils.createSession(host, username, password);
    27         
    28         //3.3 创建Mail对象
    29         String from = prop.getProperty("from");
    30         String to = user.getEmail();
    31         String subject = prop.getProperty("subject");
    32         // MessageForm.format方法会把第一个参数中的{0},使用第二个参数来替换。
    33         // 例如MessageFormat.format("你好{0}, 你{1}!", "张三", "去死吧"); 返回“你好张三,你去死吧!”
    34         String content = MessageFormat.format(prop.getProperty("content"), user.getActivationCode());
    35         Mail mail = new Mail(from, to ,subject, content);
    36         
    37         //3.4 发送邮件
    38         try {
    39             MailUtils.send(session, mail);
    40         } catch (MessagingException e) {
    41             throw new RuntimeException(e);
    42         } catch (IOException e) {
    43             throw new RuntimeException(e);
    44         }
    45     }

    二、源代码

    1.MailUtils.java

     1 package cn.itcast.mail;
     2 
     3 import java.io.IOException;
     4 import java.util.List;
     5 import java.util.Properties;
     6 
     7 import javax.mail.Authenticator;
     8 import javax.mail.Message.RecipientType;
     9 import javax.mail.MessagingException;
    10 import javax.mail.PasswordAuthentication;
    11 import javax.mail.Session;
    12 import javax.mail.Transport;
    13 import javax.mail.internet.InternetAddress;
    14 import javax.mail.internet.MimeBodyPart;
    15 import javax.mail.internet.MimeMessage;
    16 import javax.mail.internet.MimeMultipart;
    17 import javax.mail.internet.MimeUtility;
    18 
    19 /**
    20  * 
    21  * @author itcast 本类只有这么一个方法,用来发邮件!
    22  */
    23 public class MailUtils {
    24     public static Session createSession(String host, final String username, final String password) {
    25         Properties prop = new Properties();
    26         prop.setProperty("mail.host", host);// 指定主机
    27         prop.setProperty("mail.smtp.auth", "true");// 指定验证为true
    28 
    29         // 创建验证器
    30         Authenticator auth = new Authenticator() {
    31             public PasswordAuthentication getPasswordAuthentication() {
    32                 return new PasswordAuthentication(username, password);
    33             }
    34         };
    35         
    36         // 获取session对象
    37         return Session.getInstance(prop, auth);
    38     }
    39     
    40     /**
    41      * 发送指定的邮件
    42      * 
    43      * @param mail
    44      */
    45     public static void send(Session session, final Mail mail) throws MessagingException,
    46             IOException {
    47 
    48         MimeMessage msg = new MimeMessage(session);// 创建邮件对象
    49         msg.setFrom(new InternetAddress(mail.getFrom()));// 设置发件人
    50         msg.addRecipients(RecipientType.TO, mail.getToAddress());// 设置收件人
    51 
    52         // 设置抄送
    53         String cc = mail.getCcAddress();
    54         if (!cc.isEmpty()) {
    55             msg.addRecipients(RecipientType.CC, cc);
    56         }
    57 
    58         // 设置暗送
    59         String bcc = mail.getBccAddress();
    60         if (!bcc.isEmpty()) {
    61             msg.addRecipients(RecipientType.BCC, bcc);
    62         }
    63 
    64         msg.setSubject(mail.getSubject());// 设置主题
    65 
    66         MimeMultipart parts = new MimeMultipart();// 创建部件集对象
    67 
    68         MimeBodyPart part = new MimeBodyPart();// 创建一个部件
    69         part.setContent(mail.getContent(), "text/html;charset=utf-8");// 设置邮件文本内容
    70         parts.addBodyPart(part);// 把部件添加到部件集中
    71         
    72         ///////////////////////////////////////////
    73 
    74         // 添加附件
    75         List<AttachBean> attachBeanList = mail.getAttachs();// 获取所有附件
    76         if (attachBeanList != null) {
    77             for (AttachBean attach : attachBeanList) {
    78                 MimeBodyPart attachPart = new MimeBodyPart();// 创建一个部件
    79                 attachPart.attachFile(attach.getFile());// 设置附件文件
    80                 attachPart.setFileName(MimeUtility.encodeText(attach
    81                         .getFileName()));// 设置附件文件名
    82                 String cid = attach.getCid();
    83                 if(cid != null) {
    84                     attachPart.setContentID(cid);
    85                 }
    86                 parts.addBodyPart(attachPart);
    87             }
    88         }
    89 
    90         msg.setContent(parts);// 给邮件设置内容
    91         Transport.send(msg);// 发邮件
    92     }
    93 }

    2.Mail.java

      1 package cn.itcast.mail;
      2 
      3 import java.util.ArrayList;
      4 import java.util.List;
      5 
      6 /**
      7  * 表示邮件类,你需要设置:账户名和密码、收件人、抄送(可选)、暗送(可选)、主题、内容,以及附件(可选)
      8  * 
      9  * 在创建了Mail对象之后
     10  * 可以调用它的setSubject()、setContent(),设置主题和正文
     11  * 也可以调用setFrom()和 addToAddress(),设置发件人,和添加收件人。
     12  * 也可以调用addAttch()添加附件
     13  * 创建AttachBean:new AttachBean(new File("..."), "fileName");
     14  */
     15 public class Mail {
     16     private String from;//发件人
     17     private StringBuilder toAddress = new StringBuilder();//收件人
     18     private StringBuilder ccAddress = new StringBuilder();//抄送
     19     private StringBuilder bccAddress = new StringBuilder();//暗送
     20     
     21     private String subject;//主题
     22     private String content;//正文
     23     
     24     // 附件列表
     25     private List<AttachBean> attachList = new ArrayList<AttachBean>();
     26     
     27     public Mail() {}
     28     
     29     public Mail(String from, String to) {
     30         this(from, to, null, null);
     31     }
     32     
     33     public Mail(String from, String to, String subject, String content) {
     34         this.from = from;
     35         this.toAddress.append(to);
     36         this.subject = subject;
     37         this.content = content;
     38     }
     39     
     40     /**
     41      * 返回发件人
     42      * @return
     43      */
     44     public void setFrom(String from) {
     45         this.from = from;
     46     }
     47     
     48     /**
     49      * 返回发件人
     50      * @return
     51      */
     52     public String getFrom() {
     53         return from;
     54     }
     55     
     56     /**
     57      * 返回主题
     58      */
     59     public String getSubject() {
     60         return subject;
     61     }
     62 
     63     /**
     64      * 设置主题
     65      */
     66     public void setSubject(String subject) {
     67         this.subject = subject;
     68     }
     69 
     70     /**
     71      * 获取主题内容
     72      */
     73     public String getContent() {
     74         return content;
     75     }
     76 
     77     /**
     78      * 设置主题内容
     79      * @param content
     80      */
     81     public void setContent(String content) {
     82         this.content = content;
     83     }
     84 
     85     /**
     86      * 获取收件人
     87      * @return
     88      */
     89     public String getToAddress() {
     90         return toAddress.toString();
     91     }
     92 
     93     /**
     94      * 获取抄送
     95      * @return
     96      */
     97     public String getCcAddress() {
     98         return ccAddress.toString();
     99     }
    100 
    101     /**
    102      * 获取暗送
    103      * @return
    104      */
    105     public String getBccAddress() {
    106         return bccAddress.toString();
    107     }
    108 
    109     /**
    110      * 添加收件人,可以是多个收件人
    111      * @param to
    112      */
    113     public void addToAddress(String to) {
    114         if(this.toAddress.length() > 0) {
    115             this.toAddress.append(",");
    116         }
    117         this.toAddress.append(to);
    118     }
    119 
    120     /**
    121      * 添加抄送人,可以是多个抄送人
    122      * @param cc
    123      */
    124     public void addCcAddress(String cc) {
    125         if(this.ccAddress.length() > 0) {
    126             this.ccAddress.append(",");
    127         }
    128         this.ccAddress.append(cc);
    129     }
    130 
    131     /**
    132      * 添加暗送人,可以是多个暗送人
    133      * @param bcc
    134      */
    135     public void addBccAddress(String bcc) {
    136         if(this.bccAddress.length() > 0) {
    137             this.bccAddress.append(",");
    138         }
    139         this.bccAddress.append(bcc);
    140     }
    141     
    142     /**
    143      * 添加附件,可以添加多个附件
    144      * @param attachBean
    145      */
    146     public void addAttach(AttachBean attachBean) {
    147         this.attachList.add(attachBean);
    148     }
    149     
    150     /**
    151      * 获取所有附件
    152      * @return
    153      */
    154     public List<AttachBean> getAttachs() {
    155         return this.attachList;
    156     }
    157 }

     3.AttachBean.java

     1 package cn.itcast.mail;
     2 
     3 import java.io.File;
     4 
     5 /*
     6  * 附件类,只有文件,即附件才文件名
     7  */
     8 public class AttachBean {
     9     private String cid;
    10     private File file;
    11     private String fileName;
    12 
    13     public String getCid() {
    14         return cid;
    15     }
    16 
    17     public void setCid(String cid) {
    18         this.cid = cid;
    19     }
    20     
    21     public File getFile() {
    22         return file;
    23     }
    24 
    25     public void setFile(File file) {
    26         this.file = file;
    27     }
    28 
    29     public String getFileName() {
    30         return fileName;
    31     }
    32 
    33     public void setFileName(String fileName) {
    34         this.fileName = fileName;
    35     }
    36 
    37     public AttachBean() {
    38 
    39     }
    40 
    41     public AttachBean(File file, String fileName) {
    42         super();
    43         this.file = file;
    44         this.fileName = fileName;
    45     }
    46 }
  • 相关阅读:
    VS2008无法切换到视图设计器
    Log4net使用笔记
    VS2008无法切换到视图设计器
    openstack(Pike 版)集群部署(五)--- Neutron 部署
    openstack(Pike 版)集群部署(四)--- Nova 部署
    Centos 7 MariaDB Galera cluster 部署
    Centos 7 RabbitMQ + Haproxy 集群高可用部署
    openstack(Pike 版)集群部署(三)--- Glance 部署
    openstack(Pike 版)集群部署(二)--- Keystone 部署
    openstack(pike 版)集群部署(一)----基础环境部署
  • 原文地址:https://www.cnblogs.com/shamgod/p/5157002.html
Copyright © 2020-2023  润新知