zoukankan      html  css  js  c++  java
  • 发送邮件的工具类

    实现java发送邮件的过程大体有以下几步:

    1. 准备一个properties文件,该文件中存放SMTP服务器地址等参数。
    2. 利用properties创建一个Session对象
    3. 利用Session创建Message对象,然后设置邮件主题和正文
    4. 利用Transport对象发送邮件

    需要的jar有2个:activation.jar和mail.jar

    下面是实现:

     1 /**
     2      * 发送邮件的方法
     3      * 
     4      * @param serverAddress 服务器地址
     5      * @param user 服务器用户名
     6      * @param pwd 服务器密码
     7      * @param from 发送人
     8      * @param subject 标题
     9      * @param emailReceiver 接收人
    10      * @param htmlContents 发送内容
    11      * @param ucode 编码格式 text/html;charset=utf-8
    12      */
    13     public static void send(String serverAddress, String user, String pwd, String from, String subject, String[] emailReceiver, String htmlContents, String ucode,List<String> fileName, String fileNames) {
    14         if (null == fileName) {
    15             fileName = new ArrayList<String>();
    16         }
    17         
    18         try {
    19             Properties props = System.getProperties();
    20             props.put("mail.smtp.host", serverAddress);
    21             props.put("mail.smtp.auth", "true");
    22             
    23             Session session = Session.getDefaultInstance(props, null);
    24             
    25             Message msg = new MimeMessage(session);
    26             msg.setFrom(new InternetAddress(from));
    27             msg.setSentDate(new Date());
    28             msg.setSubject(subject);
    29             if (ucode.indexOf("GBK") != -1) {
    30                 msg.setFrom(new InternetAddress(new String(from.getBytes("GBK"), "UTF-8")));
    31             }
    32             
    33             InternetAddress[] address = new InternetAddress[emailReceiver.length];
    34             for (int i = 0; i < address.length; i++) {
    35                 address[i] = new InternetAddress(emailReceiver[i]);
    36             }
    37             msg.setRecipients(Message.RecipientType.TO, address);
    38             
    39             Multipart mp = new MimeMultipart();// 后面的BodyPart将加入到此处创建的Multipart中
    40             BodyPart bp = new MimeBodyPart();// 设置内容
    41             bp.setContent(htmlContents, ucode);
    42             mp.addBodyPart(bp);
    43             addFileAffix(mp, fileName, fileNames);//保存附件
    44             msg.setContent(mp);// Multipart加入到信件
    45             
    46             msg.saveChanges();
    47             
    48             // 发送信件
    49             Transport trans = session.getTransport("smtp");
    50             trans.connect(serverAddress, user, pwd);
    51             trans.sendMessage(msg, msg.getAllRecipients());
    52             trans.close();
    53         } catch (AddressException e) {
    54             throw new SysException("Email地址错误", e);
    55         } catch (UnsupportedEncodingException e) {
    56             throw new SysException("Email编码格式错误", e);
    57         } catch (NoSuchProviderException e) {
    58             throw new SysException("Email服务器连接错误", e);
    59         } catch (MessagingException e) {
    60             throw new SysException("Email服务器连接错误", e);
    61         } catch (Exception e) {
    62             throw new SysException(e.getMessage(), e);
    63         }
    64     }
    65     
    66     /**
    67      * 发送附件
    68      * @param mp 邮件信息
    69      * @param fileName 附件全路径(包括文件名称)
    70      * @return
    71      */
    72     public static void addFileAffix(Multipart mp, List<String> list,String fileNames) {
    73         if (CollectionUtils.isEmpty(list)) {
    74             return;
    75         }
    76         
    77         try{
    78             String[] arr = fileNames.split(";");
    79             for (String fileName : list) {
    80                 if(StringUtils.isEmpty(fileName)) {
    81                     return;
    82                 }
    83                 
    84                 String newName = fileName.substring(fileName.lastIndexOf(File.separator) + 1, fileName.length());
    85                 for (int i = 0; i < arr.length; i++) {
    86                     if (newName.equals(arr[i].split(":")[0])) {
    87                         newName = arr[i].split(":")[1];
    88                     }
    89                 }
    90                 
    91                 BodyPart bp = new MimeBodyPart();
    92                 bp.setDataHandler(new DataHandler(new FileDataSource(fileName)));
    93                 bp.setFileName(MimeUtility.encodeText(newName));//附件名字乱码
    94                 mp.addBodyPart(bp);
    95             }
    96         } catch(Exception e) {
    97             e.printStackTrace();
    98         }
    99     }
  • 相关阅读:
    EditPlus v2.12 使用技巧集萃
    GridView列数字、货币和日期的显示格式
    使用模态窗口编辑数据
    求sql查询语句(转换数据表由纵向转换成横向)
    插入数据 存储过程生成帐单号
    65个源代码网站
    C#抓屏(截屏)
    SQL中SET NOCOUNT的用法
    在Visual Studio2005 中调试JavaScript
    WinForm下App.config配置文件的读与写
  • 原文地址:https://www.cnblogs.com/sun-space/p/5879001.html
Copyright © 2011-2022 走看看