基于 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;360px;'/><img src='cid:a' style='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     }

运行查看接收邮箱,如下图:

 

有志者,事竟成,破釜沈舟,百二秦关终属楚。苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
原文地址:https://www.cnblogs.com/menxn/p/9181990.html