我是靠谱客的博主 爱撒娇人生,这篇文章主要介绍java 发送邮件,现在分享给大家,希望可以做个参考。

  1. 首先在pow文件中引入javax.mail.glassfish
复制代码
1
2
3
4
5
6
7
<!-- 邮件 --> <dependency> <groupId>org.eclipse.jetty.orbit</groupId> <artifactId>javax.mail.glassfish</artifactId> <version>1.4.1.v201005082020</version> </dependency>
  1. 写一个发送邮箱工具类
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
package com.example.demo; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.*; import java.util.Date; import java.util.Properties; /** * @author aq * @version V1.0.0 * @Description: 发送邮件工具类 * @date 2019/11/27 10:49 */ public class EmailUtil { /** * 邮箱配置 */ //邮箱的协议;有很多 POP3,SMTP,IMAP,在这里使用 SMTP协议 private static final String protocol = "smtp"; //qq邮箱使用smtp协议的地址 private static final String host = "smtp.qq.com"; //qq邮箱smtp的端口号有两个 465和587 private static final String port = "465"; //邮箱是否需要授权 private static final String auth = "true"; //此邮箱只针对经过安全认证的邮箱有效 private static final String fallback = "false"; //发送人邮箱账号 private static final String user = "换成自己的邮箱"; //发送人授权码 private static final String password = "换成自己的授权码"; //设置调试信息在控制台打印出来 private static final boolean debug=false; /** * main方法修改配置后直接运行即可 * @param args */ public static void main(String[] args) { //换成自己要发送的邮箱(多人发送用逗号隔开) String emails = "953692187@qq.com,1332755269@qq.com,18943142789@163.com"; //换成自己要发送的主题 String subject = "您好你的验证码是"; //换成自己要发送的内容("支持html语言") String content = "<img src='http://blog.tbaqkj.com/attachment/20191124/826b2295bd104cbd8175dd268d6e1e75.png' />"; //换成自己要上传的附件(多个附件用逗号隔开,注意路径一定要对,否则会抛异常) String fileNames = "D://test.png,D://test.txt"; EmailUtil.sendMail(emails, subject, content, fileNames); } /** * 发送邮件带附件 * * @param emails 收件人列表 * @param subject 主题 * @param content 内容 * @param filenames 附件(当附件为null时默认不发送邮件) */ public static void sendMail(String emails, String subject, String content, String filenames) { //通过Properties属性将邮箱的地址、协议、端口号写入,然后放到session中 Properties props = new Properties(); //邮箱的协议;有很多 POP3,SMTP,IMAP,在这里使用 SMTP协议 props.setProperty("mail.transport.protocol", protocol); //qq邮箱使用smtp协议的地址 props.setProperty("mail.smtp.host", host); //qq邮箱smtp的端口号有两个 465和587 props.setProperty("mail.smtp.port", port); //邮箱是否需要授权 props.setProperty("mail.smtp.auth", auth); //若是163邮箱则已经结束了,若是qq邮箱需要SSL安全认证 //java针对qq的安全认证是通过 javax.net.ssl.SSLSocketFactory全类名的抽象类来实现的 props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); //此邮箱只针对经过安全认证的邮箱有效 props.setProperty("mail.smtp.socketFactory.fallback", fallback); //安全认证的端口号,一边和邮箱的端口号一致 props.setProperty("mail.smtp.socketFactory.port", port); Session session = Session.getInstance(props); //设置调试信息在控制台打印出来 session.setDebug(debug); /** * 以逗号形式拆分字符串 */ String[] receives = emails.split(","); try { //创建邮件 // MimeMessage message = getMimeMessage(session , "3608938672@qq.com" ,"953692538@qq.com" , "3608938672@qq.com" ,"3608938672@qq.com"); MimeMessage message = getMimeMessage(session, user, receives, subject, content, filenames); //建立连接对象 Transport transport = session.getTransport(); //发送邮件的人的用户名和密码,其中密码为授权码 transport.connect(user, password); System.out.println("开始发送邮件"); long startTime = System.currentTimeMillis(); transport.sendMessage(message, message.getAllRecipients()); long endTime = System.currentTimeMillis(); System.out.println("发送邮件成功,共消耗" + (endTime - startTime) + "毫秒"); //关闭连接 transport.close(); } catch (Exception e) { e.printStackTrace(); } } /** * MimeMessage是Message的子类,Message是所有电子邮件的超类; * 标准的Java Mail API中有一个Message的子类:MimeMessage,它可用于电子邮件和Usenet新闻消息。除此之外,其他厂商可以自由扩展Message来满足自身需求 * * @param session Session:对象 * @param send 邮件的发送者 * @param receives 多个邮件的接收者 * @param subject 主题 * @param content 内容 * @return * @throws Exception */ public static MimeMessage getMimeMessage(Session session, String send, String[] receives, String subject, String content, String filenames) throws Exception { // 混合关系 // 10. 设置(文本+图片)和 附件 的关系(合成一个大的混合"节点" / Multipart ) MimeMultipart mm = new MimeMultipart(); //1.创建一封邮件的实例对象 MimeMessage msg = new MimeMessage(session); //2.设置发件人地址 msg.setFrom(new InternetAddress(send)); /** * 3.设置收件人地址(可以增加多个收件人、抄送、密送),即下面这一行代码书写多行 * MimeMessage.RecipientType.TO:发送 * MimeMessage.RecipientType.CC:抄送 * MimeMessage.RecipientType.BCC:密送 */ InternetAddress[] internetAddresses = new InternetAddress[receives.length]; for (int i = 0; i < receives.length; i++) { System.out.println("邮箱"+(i+1)+":"+receives[i]); internetAddresses[i] = new InternetAddress(receives[i]); } System.out.println("共有"+receives.length+"封邮件"); msg.setRecipients(MimeMessage.RecipientType.TO, internetAddresses); // msg.setRecipient(MimeMessage.RecipientType.CC,new InternetAddress(cReceive)); // msg.setRecipient(MimeMessage.RecipientType.BCC,new InternetAddress(bcReceive)); //4.设置邮件主题 msg.setSubject(subject, "UTF-8"); // // 5. 创建图片"节点" // MimeBodyPart image = new MimeBodyPart(); // // 读取本地文件 // DataHandler dataHandler = new DataHandler(new FileDataSource("D://test.png")); // // 将图片数据添加到"节点" // image.setDataHandler(dataHandler); // // 为"节点"设置一个唯一编号(在文本"节点"将引用该ID),若需要增加好多图片则用ID来区分 // image.setContentID("mailPic"); // 6. 创建文本"节点",MimeBodyPart表示的是一个单节点 MimeBodyPart text = new MimeBodyPart(); // 这里添加图片的方式是将整个图片包含到邮件内容中, 实际上也可以以 http 链接的形式添加网络图片 text.setContent(content, "text/html;charset=UTF-8"); // 7. (文本+图片)设置 文本 和 图片"节点"的关系(将 文本 和 图片"节点"合成一个混合"节点"), MimeMultipart表示的是一个符合节点 MimeMultipart mm_text_image = new MimeMultipart(); mm_text_image.addBodyPart(text); // mm_text_image.addBodyPart(image); // 关联关系 mm_text_image.setSubType("related"); // 8. 将 文本+图片 的混合"节点"封装成一个普通"节点" // 最终添加到邮件的 Content 是由多个 BodyPart 组成的 Multipart, 所以我们需要的是 BodyPart, // 上面的 mailTestPic 并非 BodyPart, 所有要把 mm_text_image 封装成一个 BodyPart MimeBodyPart text_image = new MimeBodyPart(); text_image.setContent(mm_text_image); mm.addBodyPart(text_image); // 如果有多个附件,可以创建多个多次添加 // 9. 创建附件"节点" if (filenames!=null && !"".equals(filenames)) { String[] filenameArray = filenames.split(","); for (int i = 0; i < filenameArray.length; i++) { MimeBodyPart attachment = new MimeBodyPart(); // 读取本地文件 DataHandler dataHandler2 = new DataHandler(new FileDataSource(filenameArray[i])); // 将附件数据添加到"节点" attachment.setDataHandler(dataHandler2); // 设置附件的文件名(需要编码) attachment.setFileName(MimeUtility.encodeText(dataHandler2.getName())); mm.addBodyPart(attachment); } } // mm.setSubType("mixed"); // 11. 设置整个邮件的关系(将最终的混合"节点"作为邮件的内容添加到邮件对象) msg.setContent(mm); //设置邮件的发送时间,默认立即发送 msg.setSentDate(new Date()); return msg; } }

放到项目里直接运行即可

最后

以上就是爱撒娇人生最近收集整理的关于java 发送邮件的全部内容,更多相关java内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(145)

评论列表共有 0 条评论

立即
投稿
返回
顶部