发邮件附件名称过长

当邮件附件名称过长时会出现乱码现象,根源在于`mail.mime.splitlongparameters`参数默认为true。为解决此问题,需在Spring启动时将该参数值设为false,确保附件名称正确显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

附件名称过长会乱码,
原因是mail.mime.splitlongparameters参数是true,
需要在spring启动加载的时候,把参数值设置为false。

package cn.com.sinosure.seplatform.common.interceptor;

import javax.inject.Named;

import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

@Named
public class ApplicationContextListener implements ApplicationListener<ContextRefreshedEvent>{

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        if (event.getApplicationContext().getDisplayName().equals("Root WebApplicationContext")) {
            System.out.println("system property init start");
            System.getProperties().setProperty("mail.mime.splitlongparameters", "false"); // 会默认为 true,会截断附件名
            System.out.println("system property init param:" + System.getProperty("mail.mime.splitlongparameters"));
        }
    }

}

发送附件

/**
     * 发送邮件,带附件
     * @param subject           邮件标题
     * @param content           邮件内容
     * @param receivers         收件人邮箱
     * @param stream            附件的文件流
     * @param fileName          附件名称
     * @param fileMimeType      附件类型: application/vnd.ms-excel;application/pdf;application/msword
     * @throws Exception
     */
    public void sendEmail(String subject,String content, String receivers, InputStream stream,String fileName,String fileMimeType) throws Exception {
        if(Strings.isEmpty(subject)){throw new Exception("邮件主题为空");}
        if(Strings.isEmpty(content)){throw new Exception("邮件正文为空");}
        if(Strings.isEmpty(receivers)){throw new Exception("接收人为空");}

        try {
            // 组装邮件数据
            String mailMimeSplite = System.getProperty("mail.mime.splitlongparameters");
            logger.info("发送邮件,mail.mime.splitlongparameters 配置{},文件名:{}", mailMimeSplite,fileName);

            MimeMessage mimeMessage = bizMailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "utf-8");
            helper.setSubject(subject);
            helper.setFrom(sender);
            helper.setTo(receivers.split(";"));
            helper.setText(content, true);

            // 加载文件资源,作为附件
            if (stream != null && fileName != null && fileMimeType != null) {
                helper.addAttachment(fileName, new ByteArrayResource(IOUtils.toByteArray(stream)), fileMimeType);
            }
            logger.info("发送邮件客户列表 = {};内容 content {}",receivers,content);

            // 发送邮件
            bizMailSender.send(mimeMessage);

            logger.info("发送邮件成功");
        } finally {
            if (stream != null) {
                stream.close();
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值