Sdílet prostřednictvím


Getting Well-Known Mailbox Folder URLs

Topic Last Modified: 2006-06-30

Each user's mailbox folder has a set of properties that you can use to retrieve URLs for well-known subfolders such as Inbox, Calendar, Drafts, and Tasks. Additionally, you can retrieve the Microsoft® Exchange mail submission Uniform Resource Identifier (URI) that is used to send messages through WebDAV or the Exchange OLE DB (ExOLEDB) provider. The returned URLs are localized into the language that is used by the client.

The following table lists the properties that return these URLs and that are retrieved from a user's root mailbox folder.

Property Well-known folder (English)

urn:schemas:httpmail:calendar

Calendar

urn:schemas:httpmail:contacts

Contacts

urn:schemas:httpmail:deleteditems

Deleted Items

urn:schemas:httpmail:drafts

Drafts

urn:schemas:httpmail:inbox

Inbox

urn:schemas:httpmail:journal

Journal

urn:schemas:httpmail:notes

Notes

urn:schemas:httpmail:outbox

Outbox

urn:schemas:httpmail:sentitems

Sent Items

urn:schemas:httpmail:tasks

Tasks

urn:schemas:httpmail:sendmsg

Exchange Mail Submission URI

urn:schemas:httpmail:msgfolderroot

Mailbox folder (root)

To access these properties:

  1. Bind to the user s root mailbox folder. You can either request the server and username from the client to construct this initial URL or search the Active Directory® directory service for the user's homeMDB attribute. From the value of this attribute, you can get the server on which the user's private mailbox is stored.
  2. Use the values of these properties to bind to these folders in a mailbox folder.

Example

VBScript

Example

<Job id="printMailboxURLs">

<reference object="ADODB.Record"/>
<reference object="CDO.Message"/>

<script language="VBScript">

userName   = WScript.Arguments.Item(0)

set info   = createobject("adsysteminfo")
set infoNT = CreateObject("WinNTSystemInfo")

urls = getStdWellKnownMailboxURLs("http://" & lcase(infoNT.ComputerName) & "." & _
                                 Info.domaindnsname & "/exchange/" & userName, _
                                 "ExOLEDB.DataSource")

wscript.echo "Well-known mailbox file: URLs for local mailbox: " & userName
wscript.echo "========================================"

For i = LBound(urls) to UBound(urls) step 2
 wscript.stdout.write urls(i)
 if Len(urls(i)) > 7 then
  wscript.stdout.write vbTab
 else
  wscript.stdout.write vbTab & vbTab
 end if
 wscript.stdout.write urls(i+1) & vbCrLf
next


Function getStdWellKnownMailboxURLs( mailboxFolderURL, provider )

 If Not TypeName(mailboxFolderURL) = "String" Then
  Err.Raise  &H80070057 ' E_INVALIDARG
 End If


 Dim Rec
 Set Rec = CreateObject("ADODB.Record")
 Dim Conn
 Set Conn = CreateObject("ADODB.Connection")
 Conn.Provider =  provider
 Conn.Open mailboxFolderURL

 Rec.Open mailboxFolderURL, Conn
 Set Flds = Rec.Fields

 ' The constants used here are defined in the CDOEx.dll type library.
 ' They are imported using the <reference> element above.

 getStdWellKnownMailboxURLs = Array( _
              "Calendar" , Flds(cdoCalendarFolderURL), _
              "Contacts" , Flds(cdoContactFolderURL), _
              "DeletedIt", Flds(cdoDeletedItems), _
              "Inbox"    , Flds(cdoInbox), _
              "Journal"  , Flds(cdoJournal), _
              "MsgRoot"  , Flds(cdoMsgFolderRoot), _
              "Notes"    , Flds(cdoNotes), _
              "Outbox"   , Flds(cdoOutbox), _
              "SendMsg"  , Flds(cdoSendMsg), _
              "SendItems", Flds(cdoSentItems), _
              "Tasks"    , Flds(cdoTasks) )

' Clean up.
Conn.Close
Rec.Close

Set Conn = Nothing
Set Rec = Nothing


End Function

</script>

</Job>

C++

Example

#import <msado15.dll> no_namespace
#import <c:\program files\common files\microsoft shared\cdo\cdoex.dll> no_namespace
#include <iostream.h>

// Note: It is recommended that all input parameters be validated when they are
// first obtained from the user or user interface.
void printMailboxFolders(bstr_t mailtoUrl) {

   IMailboxPtr iMbx;
   try {
      iMbx = getIMailbox(mailtoUrl);
   }
   catch(_com_error e) {
      throw e;
   }

   cout << "BaseFolder: " << iMbx->BaseFolder << endl;
   cout << "Inbox: "      << iMbx->Inbox << endl;
   cout << "Calendar: "   << iMbx->Calendar << endl;
   cout << "Drafts: "     << iMbx->Drafts << endl;

   //...

   IDataSourcePtr iDsrc;
   iDsrc = iMbx;
   cout << iDsrc->SourceURL << endl;
   _RecordPtr Rec(__uuidof(Record));
   _ConnectionPtr Conn(__uuidof(Connection));
   Conn->Provider = "ExOLEDB.DataSource";
   bstr_t sSendMsgUrl;
   try {
      Conn->Open(iMbx->BaseFolder, bstr_t(),bstr_t(), -1);
      Rec->Open(iMbx->BaseFolder, variant_t((IDispatch*)Conn, true), adModeRead, adFailIfNotExists, adOpenRecordUnspecified, bstr_t(), bstr_t());
      sSendMsgUrl = bstr_t(Rec->Fields->Item["urn:schemas:httpmail:sendmsg"]->Value);
   }
   catch(_com_error e) {
      cout << "Error binding to user's base mailbox folder. " << endl;
      throw e;
   }
   cout << "Mail Submission URI: " << sSendMsgUrl << endl;

   // Close the connection and record.
   Conn->Close();
   Rec->Close();
   Rec = NULL;
   Conn = NULL;

}

// Note: It is recommended that all input parameters be validated when they are
// first obtained from the user or user interface.
IMailboxPtr getIMailbox( bstr_t mailtoUrl) {

   IPersonPtr Per(__uuidof(Person));
   IDataSourcePtr Dsrc;
   Dsrc = Per;
   try {
      Dsrc->Open(mailtoUrl, NULL, adModeRead, adFailIfNotExists, adOpenRecordUnspecified, bstr_t(),bstr_t());
   }
   catch(_com_error e) {
      throw e;
   }

   return Per;
}