javamail发送邮件正文带图片和附件-仅供参考

使用javamail 发送邮件:正文、图片、附件

可以先写一个properties文件
mail.properties

mail.smtpServer=XXX.qq.com
mail.username=xxxxx@qq.com
//密码是去邮箱设置的授权码
mail.password=xxxxx

再写一个静态的配置类,为了吧发件信息写活,到时候代码好获取,测试也可以直接写死


private static final Properties props;
    static {
        InputStream in = RemoteFileConfigUtils.class.getClassLoader().getResourceAsStream("mail.properties");
        props = new Properties();
        try {
            props.load(in);
        } catch (IOException ex) {
            throw new RuntimeException(ex.getMessage(), ex);
        } finally {
            IOUtils.closeQuietly(in);
        }
    }


/**
     * 得到某一属性的值.
     * 
     * @param key
     *            取得其值的键
     * @return key的值
     */
    public static String getValue(String key) {
        if (props.containsKey(key)) {
            // 得到某一属性的值
            String value = props.getProperty(key);
            return value;
        } else
            return "";
    }

具体的代码:

public static MimeMessage imageMail(Session session,HttpServletRequest request,String emailAdd) throws MessagingException, UnsupportedEncodingException {
          //emailAdd 是收件人的邮箱地址
          //消息的固定信息
          MimeMessage mimeMessage = new MimeMessage(session);
          //邮件发送人
          mimeMessage.setFrom(new InternetAddress(CommonUtils.getValue("mail.username")));
          //邮件接收人
          mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(emailAdd));
          //标题
          mimeMessage.setSubject("标题提醒", "UTF-8");
          /*
           *  	下面是邮件内容的创建:
           */
          //创建图片“节点”
          String realPath=request.getSession().getServletContext()
                  .getRealPath("add_icon.png");
          String realPath1=request.getSession().getServletContext()
                  .getRealPath("search2.png");
          MimeBodyPart image = new MimeBodyPart();
          MimeBodyPart image1 = new MimeBodyPart();
          DataHandler dh = new DataHandler(new FileDataSource(realPath)); // 读取本地文件
          image.setDataHandler(dh);                            // 将图片数据添加到“节点”
          image.setContentID("add_icon.png");            // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
          DataHandler dh1 = new DataHandler(new FileDataSource(realPath1)); // 读取本地文件
          image1.setDataHandler(dh1);                            // 将图片数据添加到“节点”
          image1.setContentID("search2.png");            // 为“节点”设置一个唯一编号(在文本“节点”将引用该ID)
          //创建文本“节点”
          MimeBodyPart text = new MimeBodyPart();
          text.setContent("提醒:正文标题 <br> <font color=\"red\"><b>【提示】</b></font><br><br></br> " +
                 传的第一张图片 -><img src='cid:search2.png'/> 传第二张图片<img src='cid:add_icon.png'/>上。<br>" +
                       
                  ,"text/html;charset=UTF-8");
          //(文本+图片)设置 文本 和 图片 “节点”的关系(将 文本 和 图片 “节点”合成一个混合“节点”)
          MimeMultipart mm_text_image = new MimeMultipart();
          mm_text_image.addBodyPart(text);
          mm_text_image.addBodyPart(image);
          mm_text_image.addBodyPart(image1);
          mm_text_image.setSubType("related");        // 关联关系
          //将 文本+图片 的混合“节点”封装成一个普通“节点”
          //    最终添加到邮件的 Content 是由多个 BodyPart 组成的 Multipart, 所以我们需要的是 BodyPart,
          //    上面的 mm_text_image 并非 BodyPart, 所有要把 mm_text_image 封装成一个 BodyPart
          MimeBodyPart text_image = new MimeBodyPart();
          text_image.setContent(mm_text_image);
          //创建附件“节点”
          String path=request.getSession().getServletContext()
                  .getRealPath("附件-流程.zip");
          MimeBodyPart attachment = new MimeBodyPart();
          DataHandler dh2 = new DataHandler(new FileDataSource(path));  // 读取本地文件
          attachment.setDataHandler(dh2);                                                            // 将附件数据添加到“节点”
          attachment.setFileName(MimeUtility.encodeText(dh2.getName()));                    // 设置附件的文件名(需要编码)

          //设置(文本+图片)和 附件 的关系(合成一个大的混合“节点” / Multipart )
          MimeMultipart mm = new MimeMultipart();
          mm.addBodyPart(text_image);
          mm.addBodyPart(attachment);                // 如果有多个附件,可以创建多个多次添加
          mm.setSubType("mixed");                        // 混合关系

          //设置整个邮件的关系(将最终的混合“节点”作为邮件的内容添加到邮件对象)
          mimeMessage.setContent(mm);
          //设置发件时间
          mimeMessage.setSentDate(new Date());
          //保存上面的所有设置
          mimeMessage.saveChanges();
          return mimeMessage;
   }

再写一个配置类,放所有的邮件发送方式的

public static void sendImageMail(String emailAdd, Map<String, String> paramMap,HttpServletRequest request) throws MessagingException, UnsupportedEncodingException {
          //创建一个配置文件保存并读取信息
    Properties properties = new Properties();
    //设置邮件服务器
    properties.setProperty("mail.host",CommonUtils.getValue("mail.smtpServer"));
    //设置发送的协议
    properties.setProperty("mail.transport.protocol","smtp");
    //设置用户是否需要验证
    properties.setProperty("mail.smtp.auth","true");
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.timeout", 25000);
    //1.创建一个session会话对象;
    Session session = Session.getDefaultInstance(properties, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(CommonUtils.getValue("mail.username"),CommonUtils.getValue("mail.password"));
        }
    });
    //可以通过session开启Dubug模式,查看所有的过程
    session.setDebug(true);
    //2.获取连接对象,通过session对象获得Transport,需要捕获或者抛出异常;
    Transport tp = session.getTransport();
    //3.连接服务器,需要抛出异常;
    tp.connect(CommonUtils.getValue("mail.smtpServer"),CommonUtils.getValue("mail.username"),CommonUtils.getValue("mail.password"));
    //4.连接上之后我们需要发送邮件;
    MimeMessage mimeMessage =ItemFormalReviewAction.imageMail(session,request, emailAdd, paramMap);
    //5.发送邮件
    tp.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
    //6.关闭连接
    tp.close();
 }

仅供参考,本人也是小学生一枚,请大神多指教-_-!!!;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答关于 JavaMail 发送邮件附件的问题。 在 JavaMail 中发送附件邮件,可以通过以下步骤实现: 1. 创建一个 Session 对象,用于与邮件服务器进行通信。 ``` Properties props = new Properties(); props.setProperty("mail.smtp.host", "smtp.example.com"); props.setProperty("mail.smtp.auth", "true"); Session session = Session.getDefaultInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your_username", "your_password"); } }); ``` 2. 创建一个 MimeMessage 对象,设置邮件的基本信息,如发件人、收件人、主题等。 ``` MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("sender@example.com")); message.addRecipient(Message.RecipientType.TO, new InternetAddress("recipient@example.com")); message.setSubject("Test email with attachment"); ``` 3. 创建一个 Multipart 对象,用于包含邮件正文附件。 ``` Multipart multipart = new MimeMultipart(); ``` 4. 创建一个 MimeBodyPart 对象,用于包含邮件正文,并将其添加到 Multipart 对象中。 ``` MimeBodyPart bodyPart = new MimeBodyPart(); bodyPart.setText("This is the email body"); multipart.addBodyPart(bodyPart); ``` 5. 创建一个 MimeBodyPart 对象,用于包含附件,并将其添加到 Multipart 对象中。 ``` MimeBodyPart attachmentPart = new MimeBodyPart(); attachmentPart.attachFile(new File("path/to/attachment")); attachmentPart.setFileName("attachment.txt"); multipart.addBodyPart(attachmentPart); ``` 6. 将 Multipart 对象设置为 MimeMessage 对象的内容,并发送邮件。 ``` message.setContent(multipart); Transport.send(message); ``` 以上是 JavaMail 发送附件邮件的基本步骤,你可以根据实际需求进行修改和扩展。希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值