发送邮件的工具类

实现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     }

 

posted @ 2016-09-17 16:06  user_孙  阅读(240)  评论(0编辑  收藏  举报