2016-04-07 23 views
4

JavaMail 1.4 APIを使用して電子メールアカウントOffice365のフォルダにある電子メールを読み取ろうとしています。IMAPからjavamailでメールオフィス365にアクセス

私のコードは次のとおりです。

public static void main(String argv[]) throws Exception { 
    // Get a Properties object 
    Properties props = System.getProperties(); 

    // Get a Session object 
    Session session = Session.getInstance(props, null); 

    // Get a Store object 
    Store store = null; 
    Folder rf = null; 

    if (CUR_MAIL_PROTOCOL != null) 
     store = session.getStore("imap"); 

    // Connect 
    if (CUR_MAIL_HOST != null || CUR_MAIL_LOGIN != null || CUR_MAIL_PWD != null) 
     store.connect("outlook.office365.com", 993, "**MYEMAIL**", "**MYPASS**"); 
    else 
     store.connect(); 

    // List namespace 
    rf = store.getDefaultFolder(); 

    getFolderDetails(rf, true, ""); 
    if ((rf.getType() & Folder.HOLDS_FOLDERS) != 0) { 
     Folder[] f = rf.list("%"); 
     for (int i = 0; i < f.length; i++) 
      getFolderDetails(f[i], recursive, " "); 
    } 

    store.close(); 
} 

私のエラーは、次のとおりです。

Exception in thread "main" javax.mail.MessagingException: Connection timed out: connect; 
    nested exception is: 
    java.net.ConnectException: Connection timed out: connect 
    at com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:298) 
    at javax.mail.Service.connect(Service.java:234) 

おかげ

PS:アカウントOffice365のJavaMail 1.4 API

+0

JavaMailのよくある質問は、[接続の問題をデバッグするためのヒント](http://www.oracle.com/technetwork/java/javamail/faq/index.html#condebug)を有しています。 –

+0

OK:D 今、私はこのエラーを持っている: DEBUG:getProvider()を返すjavax.mail.Provider [STORE、IMAP、com.sun.mail.imap.IMAPStore、米国Sun Microsystems、Inc.] * OKマイクロソフトExchange IMAP4サービスが準備完了です。 [QQBNADMAUABSADAANQBDAEEAMAAyADEALgBlAHUAcgBwAHIAZAAwADUALgBwAHIAbwBkAC4AbwB1AHQAbABvAG8AawAuAGMAbwBtAA ==] A0機能 * CAPABILITY IMAP4 IMAP4rev1のLOGINDISABLED STARTTLS SASL-IR UIDPLUSのMOVE ID UNSELECT CHILDREN IDLE NAMESPACE LITERAL + A0 OK機能が完了しました。 A1 LOGIN [email protected] ***** A1 BADコマンドが無効な状態で受信されました。 – Marin

+0

基本エラーは次のとおりです。LOGIN A1 BADコマンドが無効な状態で受信されました。 – Marin

答えて

-1

PFBコードを使用して、これが解決します。

import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.Properties; 

import javax.mail.Address; 
import javax.mail.FetchProfile; 
import javax.mail.Flags; 
import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Store; 
import javax.mail.search.FlagTerm; 

public class OutLookReader_imaps { 

    Folder inbox; 

    // Constructor of the calss. 

    public OutLookReader_imaps() { 
     System.out.println("Inside MailReader()..."); 
     final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; 
     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", "outlook.office365.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("outlook.office365.com", 993, "My email ID", "my password"); 

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


      inbox = store.getFolder("INBOX"); 

      /* Open the inbox using store. */ 

      //inbox.open(Folder.READ_ONLY); 
      inbox.open(Folder.READ_WRITE); 

      Message messages[] = inbox.search(new FlagTerm(new Flags(
        Flags.Flag.ANSWERED), false)); 
      //Message[] msgs = inbox.getMessages(); 

      System.out.println("No. of Unread Messages : " + inbox.getUnreadMessageCount()); 
      System.out.println("No. of Messages : " + inbox.getMessageCount()); 
      System.out.println("No. of Deleted Messages : " + inbox.getMode()); 

      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; 

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

     String subject = message.getSubject(); 

     Date receivedDate = message.getReceivedDate(); 
     Date sentDate = message.getSentDate(); 

     SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 

     System.out.println("Email Subject : " + subject); 

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

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


    public static void main(String args[]) { 
     new OutLookReader_imaps(); 
    } 
} 
関連する問題