使用 java 发送邮件,附件展示乱码,不是展示自己定义的文件名

刚开始我写的代码是这样的

    private Mail initMail(List<Map<String , String>> writeInFieldsList , List<Map<String , ?>> allFieldsList , String smallCity) throws Exception {
        
        byte[] excelBytes = CustomExcelUtils.trafficSignalWarning(writeInFieldsList, allFieldsList , Constant.sheetHeaderAlias , Constant.indexedComparator);

        String renderDataToTemplate = ThymeleafTemplateUtils.trafficSignalWarning(allFieldsList);

        String subject = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE) + "关键业务指标预警-" + smallCity;

        Mail mail = new Mail();
        mail.setSubject(subject);
        mail.setFrom(javaMailSenderProperties.getUsername());
        mail.setTo("fengliangliang@xiaoning.cn");
//        mail.setCc("fengliangliang@xiaoning.cn");
        mail.setContent(renderDataToTemplate);
        mail.setAttachName("业绩预警" + ".xlsx");
        mail.setAttach(excelBytes);

        return mail;
    }



/**
     * 发送MIME类型的邮件
     * @param email 邮件对象
     */
    public void sendMimeMail(Mail email) throws MessagingException {


        //基于这个对象可以发送HTML,或者携带附件的二进制邮件
        MimeMessage message= javaMailSender.createMimeMessage();

        if(StringUtils.isNotBlank(email.getCc())) {
            message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(email.getCc()));
        }
        //构建发送模板邮件的对象
        MimeMessageHelper helper = new MimeMessageHelper(message,true);
        //设置发送邮箱
        helper.setFrom(email.getFrom());
        //设置接收邮箱
        helper.setTo(InternetAddress.parse(email.getTo()));
        //设置邮件名(主题)
        helper.setSubject(email.getSubject());
        //设置邮件内容
        helper.setText(email.getContent() ,true);

        //这里可以发送带有附件的邮件,如果没有附件可以省略,就不在多做描述
        if ( StringUtils.isNotBlank(email.getAttachName()) && email.getAttach() != null ) {
            ByteArrayResource byteArrayResource = new ByteArrayResource( email.getAttach() );
            helper.addAttachment(email.getAttachName() , byteArrayResource);
        }

        //发送邮件
        javaMailSender.send(message);

    }

结果在邮件中看到的附件是这样的

直接打开

 我将附件另存为一个正常的 excel 名称

 结果可以正常打开

 

后来我将代码中设置的附件名改成不带中文,结果好了

    private Mail initMail(List<Map<String , String>> writeInFieldsList , List<Map<String , ?>> allFieldsList , String smallCity) throws Exception {

        byte[] excelBytes = CustomExcelUtils.trafficSignalWarning(writeInFieldsList, allFieldsList , Constant.sheetHeaderAlias , Constant.indexedComparator);

        String renderDataToTemplate = ThymeleafTemplateUtils.trafficSignalWarning(allFieldsList);

        String subject = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE) + "关键业务指标预警-" + smallCity;

        Mail mail = new Mail();
        mail.setSubject(subject);
        mail.setFrom(javaMailSenderProperties.getUsername());
        mail.setTo("fengliangliang@xiaoning.cn");
//        mail.setCc("fengliangliang@xiaoning.cn");
        mail.setContent(renderDataToTemplate);
        mail.setAttachName("traffic_signal_warning_center" + ".xlsx");
        mail.setAttach(excelBytes);

        return mail;
    }

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值