2011-03-12 1 views
6

Je suis débutant dans Java et tous les jours je reçois beaucoup de courriels d'une machine avec des fichiers joints. Je dois ouvrir everday outlook et récupérer le fichier joint puis le mettre dans un dossier.Comment lire l'email de outlook avec javamail?

Comment faire cela avec javamail ou n'importe quoi d'autre dans java, il doit ouvrir l'email, récupérer le fichier xtt attaché, puis le stocker dans un dossier.

Quelqu'un pourrait-il m'aider dans cette tâche ou m'a diriger vers une page de tutoriel ou un exemple.

Merci beaucoup

+1

Cela peut être un problème en temps réel pour les gars de production! – Jayy

Répondre

0

Peut-être que vous pouvez effectuer un message trier par quelque chose comme procmail? Assurez-vous également que vous utilisez imap au lieu de pop3. Il vous donnera la possibilité d'organiser vos e-mails dans des dossiers sur le serveur.

+0

ok comment pourrais-je savoir si c'est imap ou pop3 dans les perspectives? – user618111

9

Vous pouvez le faire en utilisant java mail. Vous aurez besoin de trouver les détails de la configuration, mais un extrait de code standard pour cela serait quelque chose comme ci-dessous. J'ai copié le code extrait de here. Thos officiel javamail link a un ensemble assez décent d'exemples (c'est-à-dire comment lire les pièces jointes).

Pour stocker l'e-mail en tant que fichier dans un dossier, vous pouvez apache FileUtils. Écrivez l'email dans un fichier et copiez-le dans un dossier que vous désirez.

HTH!

 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)); 
+0

Store store = session.getStore ("imaps"); avec l'argument dans la méthode getStore() est très important, merci pour votre code. – janwen

+0

@janwen Hé les gars, hey, résolu le problème? Pouvez-vous m'aider ici (stackoverflow.com/q/36483341/3703397)? – Marin

0

J'ai résolu ce problème sans fin de cette façon.

Avis:

  • J'utilise le protocole IMAP
  • Je n'utilise que la connexion et cette classe pour voir les courriels que j'ai reçu

je l'espère, avec ces ensemble de propriétés ce peut aider beaucoup de ceux qui ont lutté avec cela pour lire, écrire, quel que soit un e-mail mais avec des perspectives.

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(); 
    } 
} 
Questions connexes