Java 通过 JavaMail 发送邮件
文章目录
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。
环境介绍:
- Java 版本:1.8.0_191
- JavaMail 版本:1.6.2
一、配置邮箱
为了设置发件邮箱能有发送邮件权限,请先设置邮箱开启 POP3/SMPT/IMAP 等选项。
这里用的是 163 邮箱
二、Maven 引入包
1<dependency>
2 <groupId>com.sun.mail</groupId>
3 <artifactId>javax.mail</artifactId>
4 <version>1.6.2</version>
5</dependency>
三、邮件实体类
邮件内容实体类,定义一些发送邮件的属性。
注意,为了简化实体类写法,这里使用了 lombok 工具。实体类
1import lombok.Data;
2
3@Data
4public class SimpleMail {
5 private String[] to;
6 private String[] cc;
7 private String[] bcc;
8 private String from;
9 private String host;
10 private String port;
11 private String subject;
12 private String body;
13 private String[] attachment;
14 private String username;
15 private String password;
16 private Boolean isHtml;
17}
四、发送邮件工具类
发送邮件工具类,用词工具调用 JavaMail 发送邮件。
1import javax.activation.DataHandler;
2import javax.activation.DataSource;
3import javax.activation.FileDataSource;
4import javax.mail.*;
5import javax.mail.internet.*;
6import java.io.UnsupportedEncodingException;
7import java.util.*;
8
9public class MailUtils {
10
11 /**
12 * 发送邮件
13 * @param simpleMail
14 */
15 public static void sendMail(SimpleMail simpleMail) {
16 /** 获取系统属性 **/
17 Properties properties = System.getProperties();
18 /** 设置邮件服务器 **/
19 properties.setProperty("mail.smtp.host", simpleMail.getHost());
20 /** 设置邮件服务器端口 **/
21 properties.setProperty("mail.smtp.port", simpleMail.getPort());
22 /** 设置服务器验证为true **/
23 properties.put("mail.smtp.auth", "true");
24 /** 获取默认session对象 **/
25 Session session = Session.getDefaultInstance(properties, new Authenticator() {
26 // 设置提供的发件邮箱与给的邮箱授权码
27 public PasswordAuthentication getPasswordAuthentication() {
28 return new PasswordAuthentication(simpleMail.getUsername(), simpleMail.getPassword());
29 }
30 });
31 try {
32 /** 创建默认的 MimeMessage 对象 **/
33 MimeMessage message = new MimeMessage(session);
34 /** 设置发件人 **/
35 message.setFrom(new InternetAddress(simpleMail.getFrom()));
36 /** 设置收件人、抄送、密送 **/
37 List<InternetAddress> toList = new ArrayList<>();
38 List<InternetAddress> ccList = new ArrayList<>();
39 List<InternetAddress> bccList = new ArrayList<>();
40 if (simpleMail.getTo() != null) {
41 for (String str : simpleMail.getTo()) {
42 toList.add(new InternetAddress(str));
43 }
44 message.addRecipients(Message.RecipientType.TO, toList.toArray(new InternetAddress[]{}));
45 }
46 if (simpleMail.getCc() != null) {
47 for (String str : simpleMail.getCc()) {
48 toList.add(new InternetAddress(str));
49 }
50 message.addRecipients(Message.RecipientType.CC, ccList.toArray(new InternetAddress[]{}));
51 }
52 if (simpleMail.getBcc() != null) {
53 for (String str : simpleMail.getBcc()) {
54 toList.add(new InternetAddress(str));
55 }
56 message.addRecipients(Message.RecipientType.BCC, bccList.toArray(new InternetAddress[]{}));
57 }
58 // 设置标题Subject
59 message.setSubject(simpleMail.getSubject());
60 //message.setText(simpleMail.getBody());
61 /** 创建消息部分 **/
62 // 创建消息体对象
63 BodyPart messageBodyPart = new MimeBodyPart();
64 // 创建多重消息对象
65 Multipart multipart = new MimeMultipart();
66 /** 设置消息 **/
67 //messageBodyPart.setText(simpleMail.getBody());
68 if (simpleMail.getIsHtml()) {
69 messageBodyPart.setContent(simpleMail.getBody(), "text/html;charset=utf-8");
70 } else {
71 messageBodyPart.setContent(simpleMail.getBody(), "text/plain;charset=utf-8");
72 }
73 // 添加到 multipart
74 multipart.addBodyPart(messageBodyPart);
75 /** 设置附件 **/
76 if (simpleMail.getAttachment()!=null){
77 for (String str:simpleMail.getAttachment()){
78 messageBodyPart = new MimeBodyPart();
79 DataSource source = new FileDataSource(str);
80 messageBodyPart.setDataHandler(new DataHandler(source));
81 // 设置文件名
82 System.out.println(str);
83 messageBodyPart.setFileName(MimeUtility.encodeText(str.substring(str.lastIndexOf("/")+1)));
84 // 添加到 multipart
85 multipart.addBodyPart(messageBodyPart);
86 }
87 }
88 /** 设置消息内容与附件 **/
89 message.setContent(multipart);
90 /** 发送消息 **/
91 Transport.send(message);
92 System.out.println("发送成功!");
93 } catch (MessagingException | UnsupportedEncodingException mex) {
94 mex.printStackTrace();
95 }
96 }
97
98}
五、测试的 Main 方法
先编写自定义的实体对象,将邮件内容、收件人、发件人等等定义好,在用此实体对象当参数调用邮件发送工具类发送邮件。
1 public static void main(String[] args) {
2 /** 1、设置发送邮件内容对象 **/
3 SimpleMail simpleMail = new SimpleMail();
4 // 指定发送邮件的服务器地址
5 simpleMail.setHost("smtp.163.com");
6 // 指定发送邮件服务器的端口
7 simpleMail.setPort("25");
8 // 收件人电子邮箱
9 simpleMail.setTo(new String[]{"32******7@qq.com", "mydlq.club@gmail.com"});
10 // 收件人抄送
11 simpleMail.setCc(new String[]{"123456789@qq.com"});
12 // 收件人密送
13 simpleMail.setTo(new String[]{"111111111@qq.com"});
14 // 发件人电子邮箱
15 simpleMail.setFrom("m*******lq@163.com");
16 // 邮件主题
17 simpleMail.setSubject("测试邮件");
18 // 邮件内容
19 //simpleMail.setBody("这是一封测试邮件");
20 simpleMail.setBody("<html>" +
21 "<p>主题:测试</p>" +
22 "<p>结果:签到人数:xxx</p>" +
23 "</html>");
24 // 是否为 HTML 格式邮件
25 simpleMail.setIsHtml(true);
26 // 邮件附件
27 simpleMail.setAttachment(new String[]{"d://非签到表.xlsx", "d://签到表.xlsx"});
28 // 设置发件邮箱的用户名、验证码
29 simpleMail.setUsername("m******lq@163.com");
30 simpleMail.setPassword("a*******0");
31
32 /** 2、调用方法发送邮件 **/
33 // 发送邮件测试
34 sendMail(simpleMail);
35 }
六、查看收到的邮件效果
上面代码执行成功后邮箱就会收到一条邮件信息,如下:
!版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。