Сохранить вложения из Email

99
11 мая 2021, 23:10

Хочется из входящих писем выбирать вложения типа doc, docx (возможно еще какие-то файлы документов). Написал метод, но он только лишь создает файлы соответствующих имен и расширений на диске, но не записывает в них содержимое. Помогите, пожалуйста, подкорректировать:

public ObservableList<ReadMail> mailList() throws Exception{
        SimpleDateFormat formatter = new SimpleDateFormat("EE dd.MM.yyyy HH:mm");
        for (Item item : findResults.getItems()) {
            EmailMessage message = EmailMessage.bind(service, item.getId());
            mailList.add(new ReadMail(message.getSender().getName(), item.getSubject(), 
                        formatter.format(message.getDateTimeReceived())));
            AttachmentCollection attachmentsCollection = message.getAttachments();
        for (int i = 0; i < attachmentsCollection.getCount(); i++) {
                Attachment attachment = attachmentsCollection.getPropertyAtIndex(i);
                FileOutputStream fileOutputStream = new FileOutputStream("D:\\test\\" + attachment.getName() , true);
                    byte[] buffer = attachment.toString().getBytes();
                fileOutputStream.write(buffer, 0, buffer.length);
                fileOutputStream.close();
            }                   
        }
        return mailList;
    }
Answer 1

Решение:

public ObservableList<ReadMail> mailList() throws Exception{
        String[] attachExtensions = {".doc", ".docx"};
        SimpleDateFormat formatter = new SimpleDateFormat("EE dd.MM.yyyy HH:mm");
        for (Item item : findResults.getItems()) {
            EmailMessage message = EmailMessage.bind(service, item.getId());
            mailList.add(new ReadMail(message.getSender().getName(), item.getSubject(), formatter.format(message.getDateTimeReceived())));
            AttachmentCollection attachmentsCollection = message.getAttachments();
            for (int i = 0; i < attachmentsCollection.getCount(); i++) {
                FileAttachment fileattaAttachment = (FileAttachment) attachmentsCollection.getPropertyAtIndex(i);
                for (int j = 0; j < attachExtensions.length; j++) {
                    if (fileattaAttachment.getName().contains(attachExtensions[i])) {
                        fileattaAttachment.load("D:\\test\\" + fileattaAttachment.getName());
                    }
                }
                System.out.println("Type: " + fileattaAttachment.getContentType()); 
            }                   
        }
        return mailList;
    }
READ ALSO
Создать метод для изменения данных в Inner Class

Создать метод для изменения данных в Inner Class

Пытаюсь сделать метод, который добавляет деньги в Storage, и также отнимаетТоесть по логике ведь, когда клиент кладет деньги в банк, общая сумма...

110
Перестал собираться maven проект

Перестал собираться maven проект

Проект с использование Spring, долгое время всё компилировалось а потом резко начал отказываться билдить модуль(единственный в проекте) А всего-то...

94
Как отобразить кириллицу в названии файла

Как отобразить кириллицу в названии файла

Сохраняю файл из директории в браузере, но почему-то в место кириллические символы заменяются на символ _

85
Подставление значений из GET запроса в input. JS

Подставление значений из GET запроса в input. JS

Есть HTML форма с фильтрами, после отправки GET запроса или после обновления страницы все значения input'ов слетаютКак с помощью js/jquery вытянуть...

114