zoukankan      html  css  js  c++  java
  • 基于 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     }

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

     

    有志者,事竟成,破釜沈舟,百二秦关终属楚。苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
  • 相关阅读:
    巴科斯范式和sql语言
    mysql 视图
    1503
    mysql SQL_CALC_FOUND_ROWS
    create table xxx as select 与 create table xxx like
    mysql 1030 Got error 28 from storage engine
    python -- 装饰器入门
    12C新特性 -- 共享asm口令文件
    MySQL子查询的优化
    MySQL的explain
  • 原文地址:https://www.cnblogs.com/menxn/p/9181990.html
Copyright © 2011-2022 走看看