This example shows how to provision a Microsoft Exchange 2000 or Exchange 2003 mail-enabled contact. The example assumes that you are using the Active Directory Connector (ADC) to maintain interoperability between Exchange 5.5 and Active Directory Domain Services (AD DS).

Note:
Microsoft Exchange 5.5 is deprecated.

Attribute Inclusion List

You must select the following attributes from the Select Attributes property page for your AD DS management agent to provision an Exchange mail-enabled contact:

Creating a Mail-Enabled Contact in a Homogeneous Exchange Environment

The following examples show how to use a rules extension to provision an Exchange mail-enabled contact. You must add a reference to logging.dll to use the LogException method.

Visual Basic  Copy Code
Public Sub Provision(ByVal mventry As MVEntry) _
	Implements IMVSynchronization.Provision

	Dim adMA As ConnectedMA
	Dim csentry As CSEntry
	Dim nickName, targetAddress As String
	Dim dn as ReferenceValue

	try
		adMA		= mventry.ConnectedMAs("Fabrikam AD MA")

		nickName	= mventry("mailNickname").Value
		targetAddress = mventry("targetAddress").Value

		' Construct the distinguished name.
		dn = adMA.EscapeDNComponent("CN=" + mventry("cn").Value).Concat("ou=mailboxes,dc=fabrikam,dc=com")

		If 0 = adMA.Connectors.Count then
			csentry = ExchangeUtils.CreateMailEnabledContact(adMA, dn, nickName, targetAddress)
		End If

		' Log and rethrow any exception.
		Catch ex As Exception
			Logging.Logging.LogException(ex, "Provision", "Caught exception", False)
			Throw
	End Try
End Sub
C#  Copy Code
void IMVSynchronization.Provision (MVEntry mventry)
{
	ConnectedMA adMA;
	CSEntry csentry;
	String nickName, targetAddress;
	ReferenceValue dn;

	try
	{
		adMA		= mventry.ConnectedMAs["Fabrikam AD MA"];

		nickName	= mventry["mailNickname"].Value;
		targetAddress = mventry["targetAddress"].Value;

		// Construct the distinguished name.
		dn = adMA.EscapeDNComponent("CN=" + mventry["cn"].Value).Concat("ou=mailboxes,dc=fabrikam,dc=com");

		if(0 == adMA.Connectors.Count)
		{
			csentry = ExchangeUtils.CreateMailEnabledContact(adMA, dn, nickName, targetAddress);
	}
}

	// Log and rethrow any exception.
	catch(Exception ex)
	{
		Logging.Logging.LogException(ex, "Provision", "Caught exception", false);
		throw;
}
}

Creating a Mail-Enabled Contact in a Mixed Exchange Environment

If your environment includes a mixed configuration of Exchange 5.5 and Exchange 2000 or Exchange 2003 servers, and you are using the Active Directory Connector to synchronize with Exchange 5.5, you must perform an additional step after you call the CreateMailEnabledContact method in your provisioning process: You must update the legacyExchangeDN connector to an Administrative Group to which a connection agreement of the Active Directory Connector points.

The following examples show how to use a rules extension to provision an Exchange mail-enabled contact in a mixed Exchange environment. You must add a reference to logging.dll to use the LogException method.

Visual Basic  Copy Code
Public Sub Provision(ByVal mventry As MVEntry) _
	Implements IMVSynchronization.Provision

	Dim adMA As ConnectedMA
	Dim csentry As CSEntry
	Dim nickName, targetAddress, rdnWithoutType, rdn, adminGroup As String
	Dim dn as ReferenceValue
	Dim equalSignInRDN As Integer

	try
		adMA		= mventry.ConnectedMAs("Fabrikam AD MA")

		nickName	= mventry("mailNickname").Value
		targetAddress = mventry("targetAddress").Value

		' Construct the distinguished name.
		dn = adMA.EscapeDNComponent("CN=" + mventry("cn").Value).Concat("ou=mailboxes,dc=fabrikam,dc=com")

		If 0 = adMA.Connectors.Count then
			csentry = ExchangeUtils.CreateMailEnabledContact(adMA, dn, nickName, targetAddress)

			equalSignInRDN = csentry.RDN.ToString().IndexOf("=")
			rdnWithoutType = csentry.RDN.Substring(equalSignInRDN + 1)
			rdn			= "cn=" + rdnWithoutType + "-" + System.Guid.NewGuid().ToString()
			adminGroup	 = "CN=First Administrative Group,CN=Administrative Groups,CN=Fabrikam,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=fabrikam,DC=com"

			csentry("legacyExchangeDN").Value = adminGroup + "/" + rdn
		End If

		' Log and rethrow any exception.
		Catch ex As Exception
			Logging.Logging.LogException(ex, "Provision", "Caught exception", False)
			Throw
	End Try
End Sub
C#  Copy Code
void IMVSynchronization.Provision (MVEntry mventry)
{
	ConnectedMA adMA;
	CSEntry csentry;
	String nickName, targetAddress, rdnWithoutType, rdn, adminGroup;
	ReferenceValue dn;
	int equalSignInRDN;

	try
	{
		adMA		= mventry.ConnectedMAs["Fabrikam AD MA"];

		nickName	= mventry["mailNickname"].Value;
		targetAddress = mventry["targetAddress"].Value;

		// Construct the distinguished name.
		dn = adMA.EscapeDNComponent("CN=" + mventry["cn"].Value).Concat("ou=mailboxes,dc=fabrikam,dc=com");

		if(0 == adMA.Connectors.Count)
		{
			csentry = ExchangeUtils.CreateMailEnabledContact(adMA, dn, nickName, targetAddress);

			equalSignInRDN = csentry.RDN.ToString().IndexOf("=");
			rdnWithoutType = csentry.RDN.Substring(equalSignInRDN + 1);
			rdn			= "cn=" + rdnWithoutType + "-" + System.Guid.NewGuid().ToString();
			adminGroup	 = "CN=First Administrative Group,CN=Administrative Groups,CN=Fabrikam,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=fabrikam,DC=com";

			csentry["legacyExchangeDN"].Value = adminGroup + "/" + rdn;
	}
}

	// Log and rethrow any exception.
	catch(Exception ex)
	{
		Logging.Logging.LogException(ex, "Provision", "Caught exception", false);
		throw;
}
}

See Also

Reference

CreateMailEnabledContact

Concepts

Microsoft Exchange Connected Data Sources