我正在尝试使用IMAP访问Exchange中的共享邮箱,但我不想将密码存储在应用中,因此我尝试了NTLM身份验证。
我能够使用SSPI框架api进行身份验证,但现在我很难选择共享的收件箱。
使用“基本”身份验证,我知道我可以做到:
a LOGIN domain/username/mailboxalias username_password //a OK LOGIN completed.
b select inbox //...\r\nb OK [READ-WRITE] SELECT completed."
这样做很好,但我不想将密码存储在我的应用程序中,所以我使用的是NTLM auth(连接到存储邮箱的exchangeserver1.domain.com):
a AUTHENTICATE NTLM // +
<type_1_msg> // + <type_2_msg>
<type_3_msg> // a OK [REFERRAL imap://;AUTH=*@exchangeServer2.domain.com/] AUTHENTICATE completed.
b select inbox // b NO [REFERRAL imap://;AUTH=*@exchangeServer2.domain.com/inbox] There is no replica for that mailbox on this server."
c select mailboxalias //c NO There is no replica for that mailbox on this server.
d select mailboxalias/inbox //d NO There is no replica for that mailbox on this server.
e select inbox/mailboxalias //e NO There is no replica for that mailbox on this server.
当前上下文用户邮箱存储在exchangeserver2中,但共享邮箱位于exchangeserver1中,这就是为什么在NTLM中你会看到REFERRAL文件,但在上述两种情况下我都连接到exchangeserver1。
我使用'邮箱别名'和'收件箱'尝试了select
命令的几种变体但没有效果。我有权访问邮箱,我是它的所有者,我可以从Outlook访问它(但我相信它使用MAPI)和'基本身份验证'。
身份验证后,如何选择共享邮箱收件箱?
我正在使用以下AcquireCredentialsHandle调用来生成NTLM类型1消息: AcquireCredentialsHandle(null,“NTLM”,2,0,0,0,0,ref phCredential,ref ptsExpiry)
我甚至尝试将第一个参数(可能是用户名)从null(当前上下文用户)更改为“domain / username / mailbox”,但它不起作用。
谢谢:)