公司项目上线都非要弄个什么数据核对,每天下班都要跑好多的规则sql,这不是重点,重点是跑完的结果还要邮件的形式发送给指定领导,
这不就是意味着一定要加班了吗?必须要有对策!有同事提议不如写一个发送邮件的程序得了,我同意了,所以这个类就在百度的帮助下诞生了。
哪里都挺成功的,测试的时候也OK了。万万没想到呀!让万恶的别乱码给阴了(发送附件如果附件有名称有中文就会乱码),出现问题最靠的住的还得是百度。
一行代码轻松搞定,开心。
1 package com.heyt.util;
2
3 import javax.activation.DataHandler;
4 import javax.activation.DataSource;
5 import javax.activation.FileDataSource;
6 import javax.mail.*;
7 import javax.mail.internet.*;
8 import java.io.UnsupportedEncodingException;
9 import java.util.Properties;
10
11
12 public class JavaEMail {
13
14 private Properties props;//用来存储一些邮件的属性,设置几个等待时间什么的。
15 private String[] params = new String[2];//用来存储发件人和授权码,要注意的是授权码和密码还不是一回事,这个我就吃了亏
16 //public JavaEMail(){}
17
18 /**
19 * @param transportType 邮件发送方式
20 * @param serviceType 服务器类型
21 * @param servicePort 服务器端口号
22 * @param fromEMail 发件人
23 * @param authPassword 授权码
24 */
25 public JavaEMail(String transportType,String serviceType,String servicePort,String fromEMail ,String authPassword)
26 {
27
28 // // 获取默认的 Session 对象。
29 // 1.创建一个程序与邮件服务器会话对象 Session
30 Properties tProps = new Properties();
31 tProps.put("mail.transport.protocol", transportType);//发件的默认方式是不是都是SMTP?
32 tProps.put("mail.smtp.host",serviceType );//smtp.exmail.qq.com 这个例子是qq的企业邮箱的服务器
33 tProps.put("mail.smtp.port", servicePort);//一般默认都是 25
34 // 指定验证为true
35 tProps.setProperty("mail.smtp.auth", "true");
36 // props.setProperty("mail.smtp.timeout","1000");
37 tProps.put("mail.smtp.timeout", 100000);//这几个参数很有必要
38 tProps.put("mail.smtp.connectiontimeout", 100000);//这几个参数很有必要
39 tProps.put("mail.smtp.writetimeout",100000);//这几个参数很有必要
40 props = (Properties) tProps.clone();
41 params[0]=fromEMail;//如果可以最好弄一个加密的方式
42 params[1]=authPassword;//如果可以最好弄一个加密的方式
43 }
44
45 /***
46 *
47 * @param mailTO 收件人集合,这个不可以为空,哈哈哈
48 * @param mailCC 抄送人集合,可以传null,若果是null就当做没有抄送
49 * @param contentTop 邮件标题,可以传null,默认值是 "您有,一封邮件待查收"
50 * @param contentText 邮件正文,可以传null,默认值是 "各位好:"
51 * @param fileName 附件的绝对地址,可以传null,如果是null就默认当做不添加附件
52 */
53 public boolean sendEmail(String[] mailTO,String[] mailCC,String contentTop,String contentText,String fileName)
54 {
55 //收件人不能是空
56 if (mailTO == null || mailTO.equals(""))
57 return false;
58 // 验证账号及密码,密码需要是第三方授权码,似乎qq企业邮件的授权码就是密码。
59 Authenticator auth = new Authenticator() {
60 @Override
61 public PasswordAuthentication getPasswordAuthentication() {
62 return new PasswordAuthentication(params[0], params[1]);
63 }
64 };
65 Session session = Session.getInstance(props, auth);//居然发现了一个final的类,和String一样,哈哈
66
67 try{
68 // 创建默认的 MimeMessage 对象。
69 MimeMessage message = new MimeMessage(session);
70
71 Address addressesTO[] = new Address[mailTO.length];
72
73 //循环收件人
74 for (int i = 0; i < mailTO.length ; i++)
75 {
76 addressesTO[i] = (Address) new InternetAddress(mailTO[i]).clone();
77 }
78 message.addRecipients(Message.RecipientType.TO,addressesTO);//设置收件人
79 //对抄送人进行处理
80 if( ! (mailCC == null|| mailCC.equals(""))) {
81 Address addressesCC[] = new Address[mailCC.length];
82 //循环抄送人
83 for (int i = 0; i < mailCC.length; i++)
84 {
85 addressesCC[i] = (Address) new InternetAddress(mailCC[i]).clone();
86 }
87 message.addRecipients(Message.RecipientType.CC, addressesCC);//设置抄送人
88 }
89 // Set Subject: 头字段
90 if(contentTop == null || contentTop.equals(""))
91 {
92 message.setSubject("您有,一封邮件待查收");
93 }else {
94 message.setSubject(contentTop);
95 }
96 // 创建消息部分
97 BodyPart messageBodyPart = new MimeBodyPart();
98 // 消息
99 if(contentText == null || contentText.equals("")){
100 messageBodyPart.setText("各位好:");
101 }else{
102 messageBodyPart.setText(contentText);
103 }
104 // 创建多重消息
105 Multipart multipart = new MimeMultipart();
106 // 设置文本消息部分
107 multipart.addBodyPart(messageBodyPart);
108 // String tFileName = fileName;
109 //目前没有对目录做校验,后续再添加吧
110 if (!( fileName == null || fileName.equals(""))){
111 // 附件部分
112 messageBodyPart = new MimeBodyPart();
113 DataSource source = new FileDataSource(fileName);
114 messageBodyPart.setDataHandler(new DataHandler(source));
115 //就只这行可以防止乱码
116 String newFileName = MimeUtility.encodeText(source.getName(),"utf-8",null);
117 messageBodyPart.setFileName(newFileName);
118 multipart.addBodyPart(messageBodyPart);
119 }
120
121 // 发送完整消息
122 message.setContent(multipart,"text/html;charset=utf-8");
123 // 发送消息
124 Transport.send(message);
125
126 System.out.println("Sent message successfully....");
127
128 }catch (MessagingException mex) {
129 mex.printStackTrace();
130 } catch (UnsupportedEncodingException e) {
131 e.printStackTrace();
132 }
133 return true;
134 }
135 public static void main(String[] args) {
136 String[] mailTO = {"test","test1","test3"};//发送人
137 String[] mailCC = {"test","test1","test3"};//抄送人
138 String contentTop = "这是一个邮件的题目";
139 String contentText = "这是这个邮件的正文";
140 String fileName = "G:\下载\other\";//如果有附件的话这填写地址
141 new JavaEMail("1","2","3","4","5").sendEmail(mailTO,mailCC,contentTop,contentText,fileName);
142 }
143 }
144
145
146
147 /*
148 <!-- 发送邮件需要的jar java send mail -->
149 <dependency>
150 <groupId>javax.mail</groupId>
151 <artifactId>mail</artifactId>
152 <version>1.4.5</version>
153 </dependency>
154 <dependency>
155 <groupId>javax.activation</groupId>
156 <artifactId>activation</artifactId>
157 <version>1.1.1</version>
158 </dependency> */