2014-03-26 48 views
0

我正嘗試使用javamail連接到交換郵件服務器(不知道哪個版本)。
我有可以模擬所有其他用戶的帳戶的用戶名和密碼。
我試圖打開其中一個用戶的存儲。 (密碼不詳)使用javamail登錄的域名/用戶/帳戶不能與交換服務器上的imap一起使用

我的確發現了這個問題How to use Javamail for accessing additional mailboxes (IMAP, Exchange 2010)。它使用[domain]/[user]/[sharedaccount]作爲登錄。

如果我只使用[域名]/[用戶],但使用第二個帳戶[域名]/[用戶]/[模擬帳戶]後面的第二個帳戶名稱,則連接將失效。
如果我在Thunderbird中使用相同的憑據,它會建立連接。

實施例:
域:ABC
已知的用戶名與密碼:admin
郵箱連接到:[email protected](原木與wverleur)
工作:
ABC /管理員
不工作:
ABC /管理/ wverleur

credentials包含以下內容:
使用rootUrl:mailserver.abc.com
用戶名:admin
密碼:密碼
域:ABC
模擬:wverleur
getImapUsername()返回域/用戶名/模擬

我的連接代碼:

private void login() throws MessagingException { 
    // connection properties 
    Properties properties = new Properties(); 

    // TLS & SSL 
    properties.setProperty("mail.imaps.starttls.enable", "true"); 
    properties.setProperty("mail.imaps.ssl.enable", "true"); 
    properties.setProperty("mail.imaps.ssl.trust", credentials.getRootUrl()); // self signed certificate 

    // login settings 
    properties.setProperty("mail.imaps.auth.ntlm.disable", "true"); 
    properties.setProperty("mail.imaps.auth.plain.disable", "true"); 
    properties.setProperty("mail.imaps.auth.gssapi.disable", "true"); 


    // retrieve a session 
    session = Session.getInstance(properties); 

    // retrieve and open a store 
    store = session.getStore("imap"); 


    try { 
     store.connect(credentials.getRootUrl(), credentials.getImapUsername(), credentials.getPassword()); 
    } catch (MessagingException messagingException) { 
     throw new MessagingException("Error in storeConnect: " + store.toString(), 
       messagingException); 
    } 
} 

JAVAMAIL德布ug顯示以下內容:
DEBUG IMAP: protocolConnect login, host=[rooturl], user=[domain]\[user]\[impersonate], password=<non-null>

我錯過了什麼嗎?
它甚至可能嗎?

+1

有你嘗試使用socat/telnet /其他網絡工具進行登錄過程,並通過IMAP登錄過程?這是解決連接和身份驗證問題的好方法。 – Max

+0

我沒有。但問題已解決。服務器在使用模擬時需要安全連接,但不需要常規登錄(不知道爲什麼)。我會刪除這個問題,因爲我認爲這對任何人都不是很有用。這是一個非常具體的問題。 –

+2

請不要刪除該問題。如何模擬用戶與Exchange現在的問題,然後來了,它是很好的有一個展示它是如何工作的例子。提供自己的答案,展示如何使其工作。 –

回答

2

爲每Bill Shannon要求我我的回答特此發佈到這樣的問題:

  1. 我把Java中的cacerts文件所需的證書(確保你知道你在做什麼)

  2. 我改變了我的屬性:
    請注意,他們現在IMAP和IMAPS不

    // TLS & SSL 
    properties.setProperty("mail.imap.starttls.enable", "true"); 
    properties.setProperty("mail.imap.ssl.enable", "false"); // is now false 
    // removed the trust for ssl 
    
    // login settings 
    properties.setProperty("mail.imap.auth.ntlm.disable", "true"); 
    properties.setProperty("mail.imap.auth.plain.disable", "true"); 
    properties.setProperty("mail.imap.auth.gssapi.disable", "true"); 
    
    properties.setProperty("mail.user", credentials.getImapUsername()); 
    properties.setProperty("mail.host", credentials.getRootUrl()); 
    

而且,對我來說,它的工作原理。
如前所述。這是一個非常服務器特定的答案和問題。我希望它可以幫助其他人將他們的程序連接到他們的交換服務器。


編輯:
由於支持的其他郵件服務器的要求更改代碼:

String protocol = "mail.imap"; 
switch (encryption){ 
    case SSL: 
     protocol = protocol + "s"; 
     properties.setProperty(protocol + ".starttls.enable", "false"); 
     properties.setProperty(protocol + ".ssl.enable", "true"); 
     break; 
    case TLS: 
     properties.setProperty(protocol + ".starttls.enable", "true"); 
     properties.setProperty(protocol + ".ssl.enable", "false"); 
     break; 
    case NONE: 
     properties.setProperty(protocol + ".starttls.enable", "false"); 
     properties.setProperty(protocol + ".ssl.enable", "false"); 
     break; 
} 
properties.setProperty(protocol + ".auth.ntlm.disable", "true"); 
properties.setProperty(protocol + ".auth.plain.disable", "true"); 
properties.setProperty(protocol + ".auth.gssapi.disable", "true"); 
// other properties you want to set 

SSL使用mail.imaps和TLS,沒有使用mail.imap

+0

就是這樣!謝謝! >請注意,他們現在是imap而不是imaps –

相關問題