基于 JavaEmail 简单的发送邮件点到点,一对多(图片和附件)
使用JUnit4运行的,根据自己喜好
话不多说直接上代码
1 @Test 2 public void sendEmailTest() { 3 try { 4 Properties properties = new Properties(); 5 // 设置smtp主机 6 properties.put("mail.smtp.host", "smtp.exmail.qq.com"); 7 // 使用smtp身份验证 8 properties.put("mail.smtp.auth", "true"); 9 /* 10 * 在 JavaMail 中,可以通过 extends Authenticator 抽象类,在子类中覆盖父类中的 11 * getPasswordAuthentication() 方法,就可以实现以不同的方式来进行登录邮箱时的用户身份认证。JavaMail 12 * 中的这种设计是使用了策略模式(Strategy 13 */ 14 MimeMessage message = new MimeMessage(Session.getInstance(properties, new Authenticator() { 15 @Override 16 public PasswordAuthentication getPasswordAuthentication() { 17 return new PasswordAuthentication(//设置发送帐号密码 18 "账号", "密码"); 19 } 20 })); 21 // 设置邮件的属性 22 23 // 设置邮件的发件人 24 // message.setFrom(new InternetAddress("发送人账号")); 25 message.setFrom(new InternetAddress("账号")); 26 // 设置邮件的收件人 cc表示抄送 bcc 表示暗送 27 message.setRecipient(Message.RecipientType.TO, new InternetAddress("接收人邮箱")); 28 // 设置邮件的主题 29 message.setSubject("我是邮件主题"); 30 // 创建邮件的正文 31 MimeBodyPart text = new MimeBodyPart(); 32 // setContent(“邮件的正文内容”,”设置邮件内容的编码方式”) 33 //内容可用css直接控制图片大小 34 String html = "<div><p>内容文字</p><div><hr style='border:1px dashed #e4e4e4;width:360px;'/><img src='cid:a' style='width:100px;'><h5>XXXXX有限公司</h5></div></div>"; 35 text.setContent(html, "text/html;charset=gb2312"); 36 37 38 // 一对多发送只要改一个地方如下: 39 40 // String toMore[] = {}; 41 // // // 构建一个群发地址数组 42 // InternetAddress[] adr = new InternetAddress[toMore.length]; 43 // for (int i = 0; i < toMore.length; i++) { 44 // adr[i] = new InternetAddress(toMore[i]); 45 // } 46 // Message的setRecipients方法支持群发。。注意:setRecipients方法是复数和点 到点不一样 47 // message.setRecipients(Message.RecipientType.TO, adr); 48 49 50 // 创建图片 51 MimeBodyPart img = new MimeBodyPart(); 52 /* 53 * JavaMail API不限制信息只为文本,任何形式的信息都可能作茧自缚MimeMessage的一部分. 54 * 除了文本信息,作为文件附件包含在电子邮件信息的一部分是很普遍的. JavaMail 55 * API通过使用DataHandler对象,提供一个允许我们包含非文本BodyPart对象的简便方法. 56 */ 57 58 // File file = new File("src/main/resources/321.png"); 59 //图片路径 60 // DataHandler dh = new DataHandler(new FileDataSource(file)); 61 //图片路径 62 DataHandler dh = new DataHandler(new FileDataSource("d://123.jpg")); 63 img.setDataHandler(dh); 64 // 创建图片的一个表示用于显示在邮件中显示 65 //html 中 src='cid:a' 表示引用 66 img.setContentID("a"); 67 // 关系 正文和图片的 68 MimeMultipart mm = new MimeMultipart(); 69 mm.addBodyPart(text); 70 mm.addBodyPart(img); 71 // 设置正文与图片之间的关系 72 mm.setSubType("related"); 73 // 图班与正文的 body 74 MimeBodyPart all = new MimeBodyPart(); 75 all.setContent(mm); 76 77 // 附件与正文(text 和 img)的关系 78 MimeMultipart mm2 = new MimeMultipart(); 79 mm2.addBodyPart(all); 80 81 82 83 // 创建附件 84 MimeBodyPart attch = new MimeBodyPart(); 85 //附件1 86 //数据源 87 88 File file = new File("d://123.jpg"); 89 InputStream c = new FileInputStream(file);; 90 DataSource source1 = new ByteArrayDataSource(c, "application/octet-stream"); 91 //设置第一个附件的数据 92 attch.setDataHandler(new DataHandler(source1)); //new DataHandler(source1) 数据处理器 93 String fileName = "123.jpg"; //可以是jpg,zip,excle (rar等其他应该也是可以的,没有具体测试) 94 // 中文乱码问题/设置第一个附件的文件名 95 attch.setFileName(MimeUtility.encodeText(fileName)); 96 mm2.addBodyPart(attch); 97 98 99 100 message.setContent(mm2); 101 // 保存修改 102 message.saveChanges(); 103 // 发送邮件 104 Transport.send(message); 105 106 } catch (Exception e) { 107 e.printStackTrace(); 108 } 109 }
运行查看接收邮箱,如下图:
有志者,事竟成,破釜沈舟,百二秦关终属楚。苦心人,天不负,卧薪尝胆,三千越甲可吞吴。