Задать вопрос
  • Как исправить кодировку в имени вложения Zimbra?

    @Sejoja
    Исправил таким образом на версии zcs-10.1.6
    Если собираете zimbra с git репозитория, то измените DEFAULT_CHARSET в файлах ZMimeParser.java и MimeHeader.java в модуле zm-mailbox с CharsetUtil.ISO_8859_1 на CharsetUtil.UTF_8 это решит проблему с битыми вложениями.

    private static final Charset DEFAULT_CHARSET = CharsetUtil.normalizeCharset(CharsetUtil.UTF_8); // ZMimeParser
    static final Charset DEFAULT_CHARSET = CharsetUtil.normalizeCharset(CharsetUtil.UTF_8); //MimeHeader


    Так же можете исправить неверное соединение имени файлов (лишние двойные ковычки и закрывающая двойная ковычка)685564feea51f361462860.png благодаря этому коду в файле Mime.java в методе getFilename:
    public static String getFilename(MimePart mp) {
            String name = null;
    
            // first, check the Content-Disposition header for the "filename" parameter
            try {
                String cdisp = mp.getHeader("Content-Disposition", null);
                if (cdisp != null) {
                    // will also catch (legal, but uncommon) RFC 2231 encoded filenames
                    //   (things like filename*=UTF-8''%E3%82%BD%E3%83%AB%E3%83%86%E3%82%A3.rtf)
                    name = new ContentDisposition(cdisp).getParameter("filename");
    
                    // Регулярное выражения для выделения на части собранного названия документа
                    Pattern DELETE_BRACKETS_FROM_SPLIT = Pattern.compile("(.+?)(\\\"\\\")");
                    // Регулярнрое выражение для нахождения лишней КОВЫЧКИ с конца
                    Pattern DELETE_BRACKETS_FROM_END = Pattern.compile("(\")$");
    
                    if(DELETE_BRACKETS_FROM_SPLIT.matcher(name).find() & DELETE_BRACKETS_FROM_END.matcher(name).find()){
                        // НАходим группы с помощью регулярки и оставляем группы по индексу $1
                        name = DELETE_BRACKETS_FROM_SPLIT.matcher(name).replaceAll("$1");
    
                        // Заменяем найденные группы на пустоту
                        name = DELETE_BRACKETS_FROM_END.matcher(name).replaceAll("").trim();
                    }
                }
            } catch (MessagingException me) {
            }
    Ответ написан
    Комментировать