Есть ли какое-либо решение для загрузки вложения электронной почты путем передачи определенного идентификатора сообщения электронной почты в Java с помощью POP? - PullRequest
0 голосов
/ 15 февраля 2019

В настоящее время работает над wso2 esb с JavaMail API.здесь я хочу, чтобы загрузил вложение не прочитанной электронной почты (Gmail) в какую-то локальную папку .В конце ESB чтение непрочитанной электронной почты и получение неопознанной электронной почты с задачей идентификатора сообщения завершено, а также передача этого идентификатора сообщения из esb в java также завершена. С конца java необходимо загрузить вложение электронной почты в этот конкретный идентификатор сообщения , чтоидет от конца ESB.Я не знаю, как загрузить вложение электронной почты для этого конкретного идентификатора сообщения в Java.

Не могли бы вы помочь мне найти решение?Заранее спасибо,

В следующем коде загрузите все вложения электронной почты в какую-то локальную папку. Необходимо скачать вложение только для этого конкретного идентификатора сообщения

public void downloadEmailAttachments(String host, String port,
            String userName, String password) {

     Properties properties = new Properties();


        properties.put("mail.pop3.host", host);
        properties.put("mail.pop3.port", port);


        properties.setProperty("mail.pop3.socketFactory.class",
                "javax.net.ssl.SSLSocketFactory");
        properties.setProperty("mail.pop3.socketFactory.fallback", "false");
        properties.setProperty("mail.pop3.socketFactory.port",
                String.valueOf(port));
        Session session = Session.getDefaultInstance(properties);
        try {
        Store store = session.getStore("pop3");
        store.connect(userName, password);  
        Folder folderInbox = store.getFolder("INBOX");
        folderInbox.open(Folder.READ_ONLY);
        Message[] arrayMessages = folderInbox.getMessages();


        for (int i = 0; i < arrayMessages.length; i++) {
            Message message = arrayMessages[i];
            Address[] fromAddress = message.getFrom();
            String from = fromAddress[0].toString();
            String subject = message.getSubject();
            String sentDate = message.getSentDate().toString();

            String contentType = message.getContentType();


            String messageContent = "";

            // store attachment file name, separated by comma
            String attachFiles = "";

            if (contentType.contains("multipart")) {

                Multipart multiPart = (Multipart) message.getContent();
                int numberOfParts = multiPart.getCount();
                for (int partCount = 0; partCount < numberOfParts; partCount++) {
                    MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
                    if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
                        // this part is attachment
                        String fileName = part.getFileName();
                        attachFiles += fileName + ", ";
                        part.saveFile(saveDirectory + File.separator + fileName);
                    } else {
                        // this part may be the message content
                        messageContent = part.getContent().toString();
                    }
                }

                if (attachFiles.length() > 1) {
                    attachFiles = attachFiles.substring(0, attachFiles.length() - 2);
                }
            } else if (contentType.contains("text/plain")
                    || contentType.contains("text/html")) {
                Object content = message.getContent();
                if (content != null) {
                    messageContent = content.toString();
                }
            }

            // print out details of each message
            System.out.println("Message #" + (i + 1) + ":");
            System.out.println("\t From: " + from);
            System.out.println("\t Subject: " + subject);
            System.out.println("\t Sent Date: " + sentDate);
            System.out.println("\t Message: " + messageContent);
            System.out.println("\t Attachments: " + attachFiles);
        }

        // disconnect
        folderInbox.close(false);
        store.close();
    } catch (NoSuchProviderException ex) {
        System.out.println("No provider for pop3.");
        ex.printStackTrace();
    } catch (MessagingException ex) {
        System.out.println("Could not connect to the message store");
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }

 }

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Нет эффективного способа сделать это с помощью POP3.POP3 потребует, чтобы клиент прочитал по крайней мере все заголовки каждого сообщения, чтобы найти сообщение, соответствующее messageId.IMAP может сделать это намного эффективнее.

Используя любой протокол, вы можете использовать метод Folder.search с MessageIDTerm , чтобы найти правильное сообщение.

Обратите внимание, что вы захотите исправить эти распространенные ошибки JavaMail в своем коде.

0 голосов
/ 15 февраля 2019

Если у вас уже есть идентификатор сообщения, это очень просто.У вас есть функция getMessage () для объекта Folder, которую вы можете использовать для одного сообщения

Message message = folderInbox.getMessage(messageId);

Это должно сработать.

*** Я предлагаю вам просмотреть документы JAVA.для API

...