Как читать электронную почту outlook с javamail?

Я новичок в Java, и каждый день я получаю много писем с компьютера с вложенными файлами. я должен открыть ежедневный внешний вид и получить прикрепленный файл, а затем положить его в папку.

Как это можно сделать с помощью javamail или чего-либо еще в java, он должен открыть электронное письмо, получить прикрепленный файл xtt и затем сохранить его в папке.

Может ли кто-нибудь помочь мне выполнить эту задачу или направить меня на страницу учебника или пример.

большое спасибо

3 ответа

Решение

Может быть, вы могли бы выполнить сортировку сообщений, используя что-то вроде procmail? Также убедитесь, что вы используете imap вместо pop3, Это даст вам возможность организовать ваши электронные письма в папки на стороне сервера.

Вы можете сделать это с помощью почты Java. Вам нужно будет найти детали конфигурации, но стандартный фрагмент кода для этого будет примерно таким, как показано ниже. Я скопировал код, отсеченный отсюда. Официальная ссылка на javamail содержит довольно приличный набор примеров (например, как читать вложения).

Для хранения электронной почты в виде файла в папке вы можете использовать apache FileUtils. Запишите письмо в файл и скопируйте его в нужную папку.

НТН!

     Properties props = System.getProperties();
     props.setProperty("mail.store.protocol", "imaps"); 
     Session session = Session.getDefaultInstance(props, null);
     Store store = session.getStore("imaps");
     store.connect("<impap_address>","<mail ID> ", "<Password>");

     inbox = store.getFolder("Inbox");
     System.out.println("No of Unread Messages : " + inbox.getUnreadMessageCount());
     inbox.open(Folder.READ_ONLY);

     /*  Get the messages which is unread in the Inbox*/
     Message messages[] = inbox.search(new FlagTerm(new Flags(Flag.SEEN), false));

Я решил эту бесконечную проблему таким образом.

Обратите внимание:

  • Я использую протокол IMAP
  • Я использую соединение и этот класс только для просмотра полученных писем

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

public class OutlookReader_imap {

    Folder inbox;

    // Constructor of the calss.

    public OutlookReader_imap() {
        System.out.println("Inside MailReader()...");
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

        /* Set the mail properties */
        /*
        props.put("mail.smtp.starttls.enable", "true");
        Session session = Session.getInstance(props);
        MimeMessage msg = new MimeMessage(session);
        // set the message content here
        Transport.send(msg, username, password);
        */


        Properties props = System.getProperties();
        // Set manual Properties
        props.setProperty("mail.imaps.socketFactory.class", SSL_FACTORY);
        props.setProperty("mail.imaps.socketFactory.fallback", "false");
        props.setProperty("mail.imaps.port", "993");
        props.setProperty("mail.imaps.socketFactory.port", "993");
        props.put("mail.imaps.host", "imap-mail.outlook.com");


        try {
            /* Create the session and get the store for read the mail. */

            Session session = Session.getDefaultInstance(System.getProperties(), null);
            Store store = session.getStore("imaps");

            store.connect("imap-mail.outlook.com", 993, "<email>", "<password>");

            /* Mention the folder name which you want to read. */

            // inbox = store.getDefaultFolder();
            // inbox = inbox.getFolder("INBOX");
            inbox = store.getFolder("INBOX");

            /* Open the inbox using store. */

            inbox.open(Folder.READ_ONLY);

            Message messages[] = inbox.search(new FlagTerm(new Flags(
                    Flags.Flag.SEEN), false));
            System.out.println("No. of Unread Messages : " + inbox.getUnreadMessageCount());

            /* Use a suitable FetchProfile */
            FetchProfile fp = new FetchProfile();
            fp.add(FetchProfile.Item.ENVELOPE);

            inbox.fetch(messages, fp);

            try {

                printAllMessages(messages);

                inbox.close(true);
                store.close();

            } catch (Exception ex) {
                System.out.println("Exception arise at the time of read mail");
                ex.printStackTrace();
            }

        } catch (MessagingException e) {
            System.out.println("Exception while connecting to server: " + e.getLocalizedMessage());
            e.printStackTrace();
            System.exit(2);
        }

    }

    public void printAllMessages(Message[] msgs) throws Exception {
        for (int i = 0; i < msgs.length; i++) {
            System.out.println("MESSAGE #" + (i + 1) + ":");
            printEnvelope(msgs[i]);
        }
    }

    public void printEnvelope(Message message) throws Exception {

        Address[] a;

        // FROM
        if ((a = message.getFrom()) != null) {
            for (int j = 0; j < a.length; j++) {
                System.out.println("De : " + a[j].toString());
            }
        }

        String subject = message.getSubject();

        Date receivedDate = message.getReceivedDate();
        Date sentDate = message.getSentDate(); // receivedDate is returning
        // null. So used getSentDate()

        //Dar Formato a la fecha
        SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");

        System.out.println("Asunto : " + subject);

        if (receivedDate != null) {
            System.out.println("Recibido: " + df.format(receivedDate));
        }

        System.out.println("Enviado : " + df.format(sentDate));
    }


    public static void main(String args[]) {
        new OutlookReader_imap();
    }
}
Другие вопросы по тегам