1 package util; 2 import java.io.File; 3 import java.io.FileOutputStream; 4 import java.util.Properties; 5 import javax.activation.DataHandler; 6 import javax.activation.FileDataSource; 7 import javax.mail.Message; 8 import javax.mail.Session; 9 import javax.mail.Transport; 10 import javax.mail.internet.*; 11 12 /** 13 * @author tian 14 * @date 2019/4/2913:48 15 */ 16 public class JavaMailUtil { 17 18 public static class MailBean{ 19 private File[] files; 20 private String host; 21 private String protocol; 22 private Boolean auth; 23 private String userName; 24 private String password; 25 private String fromUser; 26 private String toUser; 27 private String titel; 28 private String content; 29 private Integer type; 30 31 public Integer getType() { 32 return type; 33 } 34 35 public MailBean setType(Integer type) { 36 this.type = type; 37 return this; 38 } 39 40 public File[] getFiles() { 41 return files; 42 } 43 44 public MailBean setFiles(File[] files) { 45 this.files = files; 46 return this; 47 } 48 49 public String getHost() { 50 return host; 51 } 52 53 public MailBean setHost(String host) { 54 this.host = host; 55 return this; 56 } 57 58 public String getProtocol() { 59 return protocol; 60 } 61 62 public MailBean setProtocol(String protocol) { 63 this.protocol = protocol; 64 return this; 65 } 66 67 public Boolean getAuth() { 68 return auth; 69 } 70 71 public MailBean setAuth(Boolean auth) { 72 this.auth = auth; 73 return this; 74 } 75 76 public String getUserName() { 77 return userName; 78 } 79 80 public MailBean setUserName(String userName) { 81 this.userName = userName; 82 return this; 83 } 84 85 public String getPassword() { 86 return password; 87 } 88 89 public MailBean setPassword(String password) { 90 this.password = password; 91 return this; 92 } 93 94 public String getFromUser() { 95 return fromUser; 96 } 97 98 public MailBean setFromUser(String fromUser) { 99 this.fromUser = fromUser; 100 return this; 101 } 102 103 public String getToUser() { 104 return toUser; 105 } 106 107 public MailBean setToUser(String toUser) { 108 this.toUser = toUser; 109 return this; 110 } 111 112 public String getTitel() { 113 return titel; 114 } 115 116 public MailBean setTitel(String titel) { 117 this.titel = titel; 118 return this; 119 } 120 121 public String getContent() { 122 return content; 123 } 124 125 public MailBean setContent(String content) { 126 this.content = content; 127 return this; 128 } 129 } 130 /** 131 * 发送简单的文字邮件 132 */ 133 public synchronized static void Sendmail(MailBean mailBean) throws Exception { 134 Properties prop = new Properties(); 135 prop.setProperty("mail.host", mailBean.getHost()); 136 prop.setProperty("mail.transport.protocol", mailBean.getProtocol()); 137 prop.setProperty("mail.smtp.auth", "true"); 138 //使用JavaMail发送邮件的5个步骤 139 //1、创建session 140 Session session = Session.getInstance(prop); 141 //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态 142 session.setDebug(true); 143 //2、通过session得到transport对象 144 Transport ts = session.getTransport(); 145 //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。 146 ts.connect(mailBean.getHost(), mailBean.getUserName(), mailBean.getPassword()); 147 //4、创建邮件 148 Message message=null; 149 if(mailBean.getType()==1){ 150 message = createSimpleMail(session,mailBean); 151 } 152 if(mailBean.getType()==2){ 153 message = createAttachMail(session,mailBean); 154 } 155 156 //5、发送邮件 157 ts.sendMessage(message, message.getAllRecipients()); 158 ts.close(); 159 } 160 161 /** 162 * @Method: createSimpleMail 163 * @Description: 创建一封只包含文本的邮件 164 * @Anthor:孤傲苍狼 165 * 166 * @param session 167 * @return 168 * @throws Exception 169 */ 170 public static MimeMessage createSimpleMail(Session session,MailBean mailBean) 171 throws Exception { 172 //创建邮件对象 173 MimeMessage message = new MimeMessage(session); 174 //指明邮件的发件人 175 message.setFrom(new InternetAddress(mailBean.getFromUser())); 176 //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发 177 message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailBean.getToUser())); 178 //邮件的标题 179 message.setSubject(mailBean.getTitel()); 180 //邮件的文本内容 181 message.setContent(mailBean.getContent(), "text/html;charset=UTF-8"); 182 //返回创建好的邮件对象 183 return message; 184 } 185 /** 186 * @Method: createImageMail 187 * @Description: 生成一封邮件正文带图片的邮件 188 * @Anthor:孤傲苍狼 189 * 190 * @param session 191 * @return 192 * @throws Exception 193 */ 194 public static MimeMessage createImageMail(Session session,MailBean mailBean) throws Exception { 195 //创建邮件对象 196 MimeMessage message = new MimeMessage(session); 197 //指明邮件的发件人 198 message.setFrom(new InternetAddress(mailBean.getFromUser())); 199 //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发 200 message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailBean.getToUser())); 201 //邮件标题 202 message.setSubject(mailBean.getTitel()); 203 204 // 准备邮件数据 205 // 准备邮件正文数据 206 MimeBodyPart text = new MimeBodyPart(); 207 text.setContent(mailBean.getContent(), "text/html;charset=UTF-8"); 208 // 准备图片数据 209 MimeBodyPart image = new MimeBodyPart(); 210 DataHandler dh = new DataHandler(new FileDataSource(mailBean.getFiles()[0])); 211 image.setDataHandler(dh); 212 image.setContentID("xxx.jpg"); 213 // 描述数据关系 214 MimeMultipart mm = new MimeMultipart(); 215 mm.addBodyPart(text); 216 mm.addBodyPart(image); 217 mm.setSubType("related"); 218 219 message.setContent(mm); 220 message.saveChanges(); 221 //将创建好的邮件写入到E盘以文件的形式进行保存 222 message.writeTo(new FileOutputStream("E:\ImageMail.eml")); 223 //返回创建好的邮件 224 return message; 225 } 226 227 /** 228 * @Method: createAttachMail 229 * @Description: 创建一封带附件的邮件 230 * @Anthor:孤傲苍狼 231 * 232 * @param session 233 * @return 234 * @throws Exception 235 */ 236 public static MimeMessage createAttachMail(Session session ,MailBean mailBean) throws Exception{ 237 MimeMessage message = new MimeMessage(session); 238 239 //设置邮件的基本信息 240 //发件人 241 message.setFrom(new InternetAddress(mailBean.getFromUser())); 242 //收件人 243 message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailBean.getToUser())); 244 //邮件标题 245 message.setSubject(mailBean.getTitel()); 246 247 //创建邮件正文,为了避免邮件正文中文乱码问题,需要使用charset=UTF-8指明字符编码 248 MimeBodyPart text = new MimeBodyPart(); 249 text.setContent(mailBean.getContent(), "text/html;charset=UTF-8"); 250 251 if(mailBean.getFiles().length!=0){ 252 //创建邮件附件 253 MimeBodyPart attach = new MimeBodyPart(); 254 DataHandler dh = new DataHandler(new FileDataSource(mailBean.getFiles()[0])); 255 attach.setDataHandler(dh); 256 attach.setFileName(dh.getName()); // 257 258 //创建容器描述数据关系 259 MimeMultipart mp = new MimeMultipart(); 260 mp.addBodyPart(text); 261 mp.addBodyPart(attach); 262 mp.setSubType("mixed"); 263 message.setContent(mp); 264 message.saveChanges(); 265 //将创建的Email写入到E盘存储 266 message.writeTo(new FileOutputStream("E:\attachMail.eml")); 267 268 } 269 //返回生成的邮件 270 return message; 271 272 } 273 274 /** 275 * @Method: createMixedMail 276 * @Description: 生成一封带附件和带图片的邮件 277 * @Anthor:孤傲苍狼 278 * 279 * @param session 280 * @return 281 * @throws Exception 282 */ 283 public static MimeMessage createMixedMail(Session session,MailBean mailBean) throws Exception { 284 //创建邮件 285 MimeMessage message = new MimeMessage(session); 286 287 //设置邮件的基本信息 288 message.setFrom(new InternetAddress(mailBean.getFromUser())); 289 message.setRecipient(Message.RecipientType.TO, new InternetAddress(mailBean.getToUser())); 290 message.setSubject(mailBean.getTitel()); 291 292 //正文 293 MimeBodyPart text = new MimeBodyPart(); 294 text.setContent(mailBean.getContent(),"text/html;charset=UTF-8"); 295 296 //附件1 297 MimeBodyPart attach = new MimeBodyPart(); 298 DataHandler dh = new DataHandler(new FileDataSource(mailBean.getFiles()[0])); 299 attach.setDataHandler(dh); 300 attach.setFileName(dh.getName()); 301 302 303 //描述关系:正文和图片 304 MimeMultipart mp1 = new MimeMultipart(); 305 mp1.addBodyPart(text); 306 mp1.setSubType("related"); 307 308 //描述关系:正文和附件 309 MimeMultipart mp2 = new MimeMultipart(); 310 mp2.addBodyPart(attach); 311 312 //代表正文的bodypart 313 MimeBodyPart content = new MimeBodyPart(); 314 content.setContent(mp1); 315 mp2.addBodyPart(content); 316 mp2.setSubType("mixed"); 317 318 message.setContent(mp2); 319 message.saveChanges(); 320 321 message.writeTo(new FileOutputStream("E:\MixedMail.eml")); 322 //返回创建好的的邮件 323 return message; 324 325 } 326 327 public static void main(String[] args) throws Exception { 328 String code="3869"; 329 String company="睿牛逼科技无限公司"; 330 // User user=new User(); 331 MailBean mailBean=new JavaMailUtil.MailBean(); 332 mailBean.setAuth(true) 333 .setHost("smtp.qq.com") 334 .setProtocol("smtp") 335 .setType(2) 336 .setContent("<!DOCTYPE html> " + 337 "<html> " + 338 "<head> " + 339 "<title></title> " + 340 "<style> " + 341 ".qmbox { " + 342 " padding: 0; " + 343 "} " + 344 ".qm_con_body_content { " + 345 " height: auto; " + 346 " min-height: 100px; " + 347 " _height: 100px; " + 348 " word-wrap: break-word; " + 349 " font-size: 14px; " + 350 " font-family: "lucida Grande", Verdana, "Microsoft YaHei"; " + 351 "} " + 352 ".body { " + 353 " line-height: 170%; " + 354 "} " + 355 "BODY { " + 356 " font-family: "lucida Grande", Verdana, "Microsoft YaHei"; " + 357 " font-size: 12px; " + 358 " -webkit-font-smoothing: subpixel-antialiased; " + 359 "} " + 360 "BODY { " + 361 " margin: 0; " + 362 " padding: 0; " + 363 "} " + 364 "BODY { " + 365 " background-color: #fff; " + 366 " font-size: 12px; " + 367 "} " + 368 "BODY { " + 369 " background: #fff; " + 370 "} " + 371 "BODY { " + 372 " background: #fff; " + 373 " color: #000; " + 374 " font-weight: normal; " + 375 " font-family: "lucida Grande", Verdana, "Microsoft YaHei"; " + 376 " padding: 0 7px 6px 4px; " + 377 " margin: 0; " + 378 "} " + 379 "HTML { " + 380 " top: 0px; " + 381 "} " + 382 ".body P { " + 383 " line-height: 170%; " + 384 "} " + 385 "</style> " + 386 "</head> " + 387 " " + 388 "<BODY mu="mu" md="md" module="qmReadMail" context="ZC1912-rQ7uXSy7P7HThxdLFCOuY92"><DIV class=mailcontainer id=qqmail_mailcontainer> " + 389 "<DIV id=mainmail style="MARGIN-BOTTOM: 12px; POSITION: relative; Z-INDEX: 1"> " + 390 "<DIV class=body id=contentDiv style="FONT-SIZE: 14px; HEIGHT: auto; POSITION: relative; ZOOM: 1; PADDING-BOTTOM: 10px; PADDING-TOP: 15px; PADDING-LEFT: 15px; Z-INDEX: 1; LINE-HEIGHT: 1.7; PADDING-RIGHT: 15px" onmouseover=getTop().stopPropagation(event); onclick="getTop().preSwapLink(event, 'html', 'ZC1912-rQ7uXSy7P7HThxdLFCOuY92');"> " + 391 "<DIV id=qm_con_body> " + 392 "<DIV class="qmbox qm_con_body_content qqmail_webmail_only" id=mailContentContainer> " + 393 "<DIV class=main style="OVERFLOW: hidden; WIDTH: 100%; BACKGROUND-COLOR: #f7f7f7"> " + 394 "<DIV class=content style="BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; BACKGROUND: #ffffff; BORDER-BOTTOM: #cccccc 1px solid; PADDING-BOTTOM: 10px; PADDING-TOP: 10px; PADDING-LEFT: 25px; BORDER-LEFT: #cccccc 1px solid; MARGIN: 50px; PADDING-RIGHT: 25px"> " + 395 "<DIV class=header style="MARGIN-BOTTOM: 30px"> " + 396 "<P>亲爱的用户:</P></DIV> " + 397 "<P>您好!您正在进行邮箱验证,本次请求的验证码为:</P> " + 398 "<P><SPAN style="FONT-SIZE: 18px; FONT-WEIGHT: bold; COLOR: #f90">"+code+"</SPAN><SPAN style="COLOR: #000000">(为了保障您帐号的安全性,请在10分钟内完成验证)</SPAN></P> " + 399 "<DIV class=footer style="MARGIN-TOP: 30px"> " + 400 "<P>"+company+"</P> " + 401 "<P><SPAN style="BORDER-BOTTOM: #ccc 1px dashed; POSITION: relative; _display: inline-block" t="5" times="" isout="0">2019-02-12</SPAN></P></DIV> " + 402 "<DIV class=tip style="COLOR: #cccccc; TEXT-ALIGN: center">该邮件为系统自动发送,请勿进行回复 </DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></BODY> " + 403 "</html> ") 404 .setFromUser("tian.**.1995@qq.com") 405 .setToUser("510002**94@qq.com") 406 .setTitel("邮箱验证") 407 .setUserName("tian.**.1995@qq.com") 408 .setPassword("lbcrovywudilebje") 409 .setFiles(new File[]{new File("E:/nginx-1.14.2.zip")}); 410 411 Sendmail(mailBean); 412 } 413 414 }
原文地址:https://www.cnblogs.com/xdp-gacl/p/4216311.html