小付博客

无话可说...

您现在的位置是:首页>技术分享>MimeMultipart 邮件发送附件名称过长 出现 tcmime bin文件

MimeMultipart 邮件发送附件名称过长 出现 tcmime bin文件

发布时间:2017-10-23 编辑:小付 浏览(1615) 评论(0)

    /**
     * 邮件发送
     * @param formEmail发送方邮件
     * @param toEmail收件人邮件
     * @param ccEmail抄送人邮件
     * @param title邮件标题
     * @param message邮件内容
     * @param isSec是否密送
     * @param files邮件附件
     * @throws Exception
     */
    public static void sendMail(String formEmail, String[] toEmail, String[] ccEmail, 
    String title, String message, boolean isSec, List<GridFSDBFile> files) throws Exception{
    //修复附件名称过长 附件名称出错BUG
    System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
    
    JavaMailSenderImpl ms = (JavaMailSenderImpl) FORP.SPRING_CONTEXT.getBean("mailSender");
    MimeMessage msg = ms.createMimeMessage();
    msg.setHeader("Content-Transfer-Encoding", "quoted-printable");
    
    MimeMessageHelper mh = new MimeMessageHelper(msg,true, "UTF-8");
    mh.setFrom(formEmail);//发件人账户
    
            //密送
            if (isSec) {
                mh.setBcc(toEmail);
            } else {
            mh.setTo(toEmail); //收件邮箱
        mh.setCc(ccEmail);//抄送邮箱
            }
    
    mh.setSubject(title);
    
    /***fubb  修复 邮件附件带html格式的 邮件内容不显示BUG  Start...***/
    Multipart multipart = new MimeMultipart();
    
    if (files!=null && files.size()>0) {
        for (GridFSDBFile f:files) {
                File file=new File(f.getFilename());
            f.writeTo(file);
        
                BodyPart filePart = new MimeBodyPart();
                DataSource source = new FileDataSource(file);
                filePart.setDataHandler(new DataHandler(source));
                String fileName = MimeUtility.encodeText(f.getFilename());
                filePart.setFileName(fileName);
                multipart.addBodyPart(filePart);
        }
    }
    
    //邮件内容
    BodyPart messageContentBodyPart = new MimeBodyPart();
            messageContentBodyPart.setContent(message, "text/html; charset=utf-8");
            multipart.addBodyPart(messageContentBodyPart);
    msg.setContent(multipart);
    /***fubb  修复 邮件附件带html格式的 邮件内容不显示BUG  End...***/
    
    lg.info("发送邮件 标题:"+title);
    ms.send(msg);
    }


    主要是这行放在靠前位置:

    (如果在new MimeMultipart之后添加,有可能无效)

    System.getProperties().setProperty("mail.mime.splitlongparameters", "false");


关键字词:java,MimeMessage,MimeMultipart,附件,邮件,tcmime