栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java群发邮件,不同收件人对应不同的正文

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java群发邮件,不同收件人对应不同的正文

页面输入:excel文件、多个word文件、主题、附件(可输)、发件人邮箱、授权码
处理逻辑:excel文件记录了序号和收件人邮箱,根据名字为“序号_序号”查找到具体的word文件,将Word文件里面内容“文字和表格图片”作为正文发送出去。

前端:




    
    邮件发送
    
    


WELCOME!
收件人:
正文(.docx):
发件人:
授权码:
主题:
是否有附件?
否
是

后端:

Controller.java

@PostMapping("/upload2")
    @ResponseBody
    public String uploadFile(@RequestParam("texts") MultipartFile[] files,
                             @RequestPart("excel") MultipartFile excel,
                             @RequestParam("sender") String sender,
                             @RequestParam("code") String code,
                             @RequestPart("extra") MultipartFile extra,
                             @RequestParam("extra1") Boolean hasExtra,
                             @RequestParam("theme") String theme,
                             HttpServletRequest request) {
        MultipartFile text = null;
        ArrayList> receiverList = ExcelAnalysisUtil.analysisByCol(excel);
        JavaMailSender mailSender = emailUtil.init(sender,code);
            for (int i = 0; i < receiverList.get(0).size(); i++) {
                String filename = concat(receiverList.get(0).get(i), "_", receiverList.get(0).get(i));
                text = findFile(filename, files); // 获得正文
                if (text == null) {
                    return "搜寻不到正文,请确认是否遗漏";
                }
                try {
                    // 正文转换为html文件
                    File f = FileUtil.MultipartFileToFile1((text));
                    String html = WordToHtml2.docx2Html(f);
                    if(f.exists()){
                        f.delete();
                    }
                    String receiver = receiverList.get(1).get(i); // 收件人
                    emailUtil.sendMail(mailSender,sender,html, receiver, hasExtra, extra, theme);
                }catch(MailException e) {
                    e.printStackTrace();
                }
                catch(IOException e) {
                    e.printStackTrace();
                    return e.toString();
                }
            }
        return "success";
    }


    // 从正文列表中根据名称获得对应正文文件
    public MultipartFile findFile(String name,MultipartFile[] files) {
        for(MultipartFile m:files) {
            int prefix = m.getOriginalFilename().lastIndexOf(".");
            String filename = m.getOriginalFilename().substring(0,prefix);
            if(name.equals(filename)){
                return m;
            }
        }
        return null;
    }

analysisByCol()是解析excel文件方法,可直接上网查,在此不赘述了。

@Component
public class EmailUtil {
    
    public JavaMailSender init(String sender, String code) {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        String host = sender.substring(sender.lastIndexOf("@")+1);
        mailSender.setHost("smtp." + host);
        mailSender.setUsername(sender);
        mailSender.setPassword(code);
        mailSender.setDefaultEncoding("UTF-8");
        return mailSender;
    }

    
    public boolean sendMail(JavaMailSender mailSender, String sender, String text, String receiver, boolean hasExtra, MultipartFile extra, String theme) {
        //创建复杂有限发送对象
        MimeMessage mimeMessage = mailSender.createMimeMessage();

        try {
            // 有附件
            if (hasExtra) {

                MimeMessageHelper messageHelper = null;
                messageHelper = new MimeMessageHelper(mimeMessage, true);
                messageHelper.setFrom(sender);           // 设置发件人邮箱(若配置默认邮箱则不用再设置)
                messageHelper.setTo(receiver);            // 设置收件人邮箱
                messageHelper.setSubject(theme);                  // 设置邮件主题

                FileSystemResource resource = new FileSystemResource(FileUtil.MultipartFileToFile1(extra));
                messageHelper.addAttachment(
                        Objects.requireNonNull(resource.getFilename()),//附件名称
                        resource,  //附件流
                        Files.probeContentType(Paths.get(Objects.requireNonNull(resource.getFilename()))));//附件类型

                //设置邮件内容   cid:资源id     在内容中引用资源    后面true代表是html内容
                messageHelper.setText(text, true);

                //发送
                mailSender.send(mimeMessage);
            } else {// 没有附件
                MimeMessageHelper helper = new MimeMessageHelper(mimeMessage);
                helper.setFrom(sender);
                helper.setTo(receiver);
                helper.setSubject(theme);
                helper.setSentDate(new Date());//发送时间

                //第一个参数要发送的内容,第二个参数是不是Html格式。
                helper.setText(text, true);
                mailSender.send(mimeMessage);

            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

}

public class FileUtil {

    public static File MultipartFileToFile1(MultipartFile multipartFile) throws IOException {
        String path = "I:/" + multipartFile.getOriginalFilename();
        File file = new File(path);
        FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);
        return file;
    }
}

 

WordToHtml2:
    
    public static String docx2Html(File docxFile){
        String html = null;
        String imagePath=docxFile.getAbsolutePath().replaceAll(docxFile.getName(),"")+"docxImage/";
        File imageFile=new File(imagePath);
        if(!docxFile.exists()){
            System.out.println("文件不存在!");
        }

        try {
            InputStream in=new FileInputStream(docxFile);
            XWPFDocument document=new XWPFDocument(in);
            //存储图片
            XHTMLOptions options=XHTMLOptions.create();
            //存放图片的文件夹
            options.setIgnoreStylesIfUnused(false);
            options.setFragment(true);
            options.setImageManager(new Base64EmbedImgManager());
            // 3) 将 XWPFDocument转换成XHTML
//                OutputStream out = new FileOutputStream(new File(tempPath+"\a.html"));
//                XHTMLConverter.getInstance().convert(document, out, options);

            //也可以使用字符数组流获取解析的内容
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            XHTMLConverter.getInstance().convert(document, baos, options);
            html = new String(baos.toByteArray());
            in.close();
            baos.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XWPFConverterException e) {
            e.printStackTrace();
        }
        return html;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1032284.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号