Как загрузить вложения электронной почты с помощью POP3 с помощью SpringBoot?

#java #spring-boot #email-attachments #pop3

Вопрос:

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

 @SpringBootApplication
public class MailDownload implements CommandLineRunner {

    private String downloadDirectory = "/Desktop/";
    private String smtpHost = System.getProperty("emailHost", "outlook.office365.com");


    public static void main(String[] args) {
        SpringApplication.run(MailDownload.class);
    }

    @Override
    public void run(String... args) throws Exception {
        downloadEmailAttachments(smtpHost,"995");
    }

    public void downloadEmailAttachments(String host, String port) throws NoSuchProviderException, MessagingException, IOException {
        Properties properties = setMailServerProperties(host, port);
        Store store = setSessionStoreProperties(properties);
        Folder inbox = store.getFolder("INBOX");
        inbox.open(Folder.READ_ONLY);
        Message[] arrayMessages = inbox.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();
            List<String> attachments = new ArrayList<String>();
            if (message.getContentType().contains("multipart")) {
                attachments = downloadAttachments(message);
            }

            System.out.println("Message #"   (i   1)   ":");
            System.out.println(" From: "   from);
            System.out.println(" Subject: "   subject);
            System.out.println(" Sent Date: "   sentDate);
            System.out.println(" Attachments: "   attachments);
        }
        inbox.close(false);
        store.close();
    }

    public Properties setMailServerProperties(String host, String port) {
        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));
        return properties;
    }

    public Store setSessionStoreProperties(Properties properties) throws NoSuchProviderException, MessagingException {
        Session session = Session.getDefaultInstance(properties);

        Store store = session.getStore("pop3");
        store.connect("helloworld@outlook.com","Password");
        return store;
    }

    public List<String> downloadAttachments(Message message) throws IOException, MessagingException {
        List<String> downloadedAttachments = new ArrayList<String>();
        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())) {
                String file = part.getFileName();
                part.saveFile(downloadDirectory   File.separator   part.getFileName());
                downloadedAttachments.add(file);
            }
        }
        return downloadedAttachments;
    }

}