Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Java > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 07.11.2019, 13:06   #1
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 136
По умолчанию Странные имена вложений в письме

Добрый день.
Есть программа, написанная на Java8. До сегодняшнего дня она принимала и разбирала вложения письма, пока не добавился ещё один адрес отправителя. От него приходят вот два таких странных вложения.

=?UTF-8?B?MjAxOTExMDYtMTAxMDMucmVz?=
=?UTF-8?B?MjAxOTExMDYtMTAyMDMucmVz?=

Хотя, в Outlook они нормально отображаются

20191106-10103.res
20191106-10203.res

Что такое? Кириллицы в именах вложений нет. Может надо как-то декодировать письмо? Помню, такая фича была в Delphi.

Вот процедура сохранения вложений.

Код:
private ArrayList<File> getAtachments(Message message, String fromAddress) throws IOException, MessagingException, Exception{
    final ArrayList<File> retList = new ArrayList();
    
    if(!message.isMimeType(("multipart/mixed")))return retList;
    
    Multipart multipart = (Multipart)message.getContent();
    
    for(int i = 0 ; i < multipart.getCount(); i++){
        BodyPart bodyPart = multipart.getBodyPart(i);
        
        if(!Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition()) && StringUtils.isBlank(bodyPart.getFileName())) {
            continue; // dealing with attachments only
        }        


        HashMap<String,String> fileEnd = new HashMap<>();
        if(JSON.addresses.containsKey(fromAddress)) fileEnd.put(JSON.attachName, JSON.attachName);
        if(TC.addresses.containsKey(fromAddress)) {fileEnd.put(".TC", ".TC"); fileEnd.putAll(optOther.archives); }
        if(RES.addresses.containsKey(fromAddress)) {fileEnd.put(".RES", ".RES"); fileEnd.putAll(optOther.archives);}
        if(IRES.addresses.containsKey(fromAddress)) {fileEnd.put(".I.RES", ".I.RES"); fileEnd.putAll(optOther.archives);}
        
        
        Set<String> keys = fileEnd.keySet();
        int z = -1;
       
        System.out.println(bodyPart.getFileName());
        
        for(String key:keys) {if(bodyPart.getFileName().toUpperCase().endsWith(key) || bodyPart.getFileName().toUpperCase().startsWith(key)) z++;}
        
        if(z == -1) continue;//пропускаем ненужные вложения 

        Path currentAtachmentsDir = Paths.get("message_data");

        if(!Files.exists(currentAtachmentsDir)){
            Files.createDirectories(currentAtachmentsDir);
        }

        String atachmentDirName = currentAtachmentsDir.toAbsolutePath().toString().concat("/atachment_").concat(DateFormatUtils.format(new java.util.Date(), "ddMMyyyyHHmmssSSS")).concat("_").concat(fromAddress).concat("_").concat(DateFormatUtils.format(message.getSentDate(), "ddMMyyyyHHmmssSSS"));

        Path atachmentDir = Paths.get(atachmentDirName);

        if(!Files.exists(atachmentDir)){
            Files.createDirectories(atachmentDir);
        }


        InputStream is = bodyPart.getInputStream();
        File f = new File(atachmentDir.toAbsolutePath() + "/" + bodyPart.getFileName());
        try (FileOutputStream fos = new FileOutputStream(f)) {
            byte[] buf = new byte[4096];
            int bytesRead;
            while((bytesRead = is.read(buf))!=-1) {
                fos.write(buf, 0, bytesRead);
            }
        }
        retList.add(f);
    }
    
    return retList;
}
ivan.tiran вне форума Ответить с цитированием
Старый 07.11.2019, 13:22   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,097
По умолчанию

Это rfc2047, берете MimeUtility, например, и decodeText
Пишу программы на С++. ТЗ, цену и сроки на p51x.fr {@} яндекс.ру
p51x вне форума Ответить с цитированием
Старый 07.11.2019, 13:58   #3
ivan.tiran
Форумчанин
 
Аватар для ivan.tiran
 
Регистрация: 24.08.2011
Сообщений: 136
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Это rfc2047, берете MimeUtility, например, и decodeText
Спасибо, работает!
ivan.tiran вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить, что получатель нажал на спам в письме? bilibian Общие вопросы Delphi 2 05.02.2014 21:41
Как увеличить шрифт в отправляемом с сайта письме? Arassir PHP 4 05.07.2011 23:55
Отпрака нескольких Отчетов в одном письме fitushka Microsoft Office Access 0 10.11.2010 16:32
Как отправит на E-mail Несколько файлов в одном письме? dolphin705 Работа с сетью в Delphi 11 14.07.2010 23:11
Attachment в письме betirsolt Работа с сетью в Delphi 1 09.09.2009 09:09