// smtpadm.idl : IDL source for smtpadm.dll
//

// This file will be processed by the MIDL tool to
// produce the type library (smtpadm.tlb) and marshalling code.

midl_pragma warning(disable:2362)   // too many methods in the interface

cpp_quote("")
cpp_quote("/*++")
cpp_quote("")
cpp_quote("Copyright (c) 1997 Microsoft Corporation")
cpp_quote("")
cpp_quote("Module Name: smtpadm.h")
cpp_quote("")
cpp_quote("    Smtp Admin Object Interfaces")
cpp_quote("")
cpp_quote("--*/")
cpp_quote("")
cpp_quote("#ifndef _SMTPADM_IDL_INCLUDED_")
cpp_quote("#define _SMTPADM_IDL_INCLUDED_")

//
//  Define GUIDS:
//

cpp_quote("")
cpp_quote("/* LIBIDs: */")
cpp_quote("")
cpp_quote("DEFINE_GUID(LIBID_SMTPADMLib, 0x1a04ea80,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")


cpp_quote("")
cpp_quote("/* IIDs: */")
cpp_quote("")

#ifndef _ADSIIEX_BUILD
cpp_quote("DEFINE_GUID(IID_ISmtpAdmin, 0x1a04ea81,0x9414,0x11d0, 0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(IID_ISmtpAdminService, 0x1a04ea82,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(IID_ISmtpAdminVirtualServer, 0x1a04ea83,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(IID_IWebAdminHelper, 0xf6052b92,0x2bb6,0x11d1,0xbf,0xfa,0x00,0xc0,0x4f,0xc3,0x07,0xbd);")
#endif

cpp_quote("DEFINE_GUID(IID_ISmtpAdminSessions, 0x1a04ea84,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(IID_ISmtpAdminVirtualDirectory, 0x1a04ea92,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(IID_ISmtpAdminAlias, 0x1a04ea85,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(IID_ISmtpAdminUser, 0x1a04ea86,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(IID_ISmtpAdminDL, 0x1a04ea87,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(IID_ISmtpAdminDomain, 0x1a04ea88,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")

cpp_quote("")
cpp_quote("/* CLSID: */")
cpp_quote("")

#ifndef _ADSIIEX_BUILD
cpp_quote("DEFINE_GUID(CLSID_CSmtpAdmin, 0x1a04ea89,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(CLSID_CSmtpAdminService, 0x1a04ea8a,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(CLSID_CSmtpAdminVirtualServer, 0x1a04ea8b,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(CLSID_CSmtpAdminVirtualDirectory, 0x1a04ea8d,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(CLSID_CWebAdminHelper, 0x7f333a96,0x2bb5,0x11d1,0xbf,0xfa,0x00,0xc0,0x4f,0xc3,0x07,0xbd);")
#endif

cpp_quote("DEFINE_GUID(CLSID_CSmtpAdminSessions, 0x1a04ea8c,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(CLSID_CSmtpAdminAlias, 0x1a04ea8e,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(CLSID_CSmtpAdminUser, 0x1a04ea8f,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(CLSID_CSmtpAdminDL, 0x1a04ea90,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")
cpp_quote("DEFINE_GUID(CLSID_CSmtpAdminDomain, 0x1a04ea91,0x9414,0x11d0,0x90,0x6f,0x00,0xaa,0x00,0xa1,0xea,0xb7);")

cpp_quote("#include <iads.h>")

#define DISPID_IADs_UPPER_BOUND 100

[
	uuid(1a04ea80-9414-11d0-906f-00aa00a1eab7),
	version(1.0),
	helpstring("smtpadm 1.0 Type Library")
]
library SMTPADMLib
{
	importlib("stdole2.tlb");
	importlib("activeds.tlb");

#ifndef _ADSIIEX_BUILD
    #include "binding.idl"
    #include "ipaccess.idl"
    #include "rtsrc.idl"
#endif

	// forward declaration
#ifndef _ADSIIEX_BUILD
	interface ISmtpAdmin;
	interface ISmtpAdminService;
	interface ISmtpAdminVirtualServer;
	interface ISmtpAdminVirtualDirectory;
	interface ITcpAccess;
	interface ITcpAccessExceptions;
	interface ITcpAccessException;
    interface ISmtpAdminHelper;
#endif

	interface ISmtpAdminSessions;
	interface ISmtpAdminAlias;
	interface ISmtpAdminUser;
	interface ISmtpAdminDL;
	interface ISmtpAdminDomain;


	//////////////////////////////////////////////////////////////////////
	//
	//      Type definitions:
	//
	//////////////////////////////////////////////////////////////////////

	//      Define our types:

	typedef enum {
			NAME_TYPE_USER				= 0x1,
			NAME_TYPE_LIST_NORMAL		= 0x2,
			NAME_TYPE_LIST_DOMAIN		= 0x4,
			NAME_TYPE_LIST_SITE			= 0x8,

			NAME_TYPE_ALL				= 0xf
	} SMTP_NAME_TYPE;

/*
	typedef enum {
			SMTP_NO_ACTION			= 0,
			SMTP_DROP,
			SMTP_SMARTHOST,
			SMTP_SSL,
			SMTP_ALIAS,
			SMTP_DELIVER,
			SMTP_DEFAULT,
			LAST_SMTP_ACTION
	} SMTP_DOMAIN_ACTION_TYPE;
*/

	typedef enum {
			SMTP_SERVER_STATE_UNKNOWN       =       0,
			SMTP_SERVER_STATE_STARTING,
			SMTP_SERVER_STATE_STARTED,
			SMTP_SERVER_STATE_STOPPING,
			SMTP_SERVER_STATE_STOPPED,
			SMTP_SERVER_STATE_PAUSING,
			SMTP_SERVER_STATE_PAUSED,
			SMTP_SERVER_STATE_CONTINUING
	} SMTP_SERVER_STATE;


#ifndef _ADSIIEX_BUILD
	[
		object,
		uuid(1a04ea81-9414-11d0-906f-00aa00a1eab7),
		dual,
		helpstring("ISmtpAdmin Interface"),
		pointer_default(unique)
	]
	interface ISmtpAdmin : IDispatch
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Pointers to other ISmtpAdmin interfaces:

		[propget, helpstring("ISmtpAdminVirtualServer interface"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT	VirtualServerAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("ISmtpAdminService"), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("ISmtpAdminSessions"), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT SessionsAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("ISmtpAdminVirtualDirectory"), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT VirtualDirectoryAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("ISmtpAdminAlias"), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT AliasAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("ISmtpAdminUser"), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT UserAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("ISmtpAdminDL"), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT DLAdmin ( [out, retval] IDispatch ** ppIDispatch );

		[propget, helpstring("ISmtpAdminDL"), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT DomainAdmin ( [out, retval] IDispatch ** ppIDispatch );

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT ServiceInstance ( [out, retval] long * plServiceInstance );
		[propput, id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT ServiceInstance ( [in] long lServiceInstance );

		// Versioning:

		[propget, helpstring("Versioning Information"), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT	HighVersion ( [out, retval] long * plHighVersion );
		
		[propget, helpstring("Versioning Information"), id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT LowVersion ( [out, retval] long * plLowVersion );

		[propget, helpstring("Build Number"), id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT BuildNum ( [out, retval] long * plBuildNumber );

		[propget, helpstring("Service version #"), id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT	ServiceVersion ( [out, retval] long * pdwServiceVersion );


		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Enumerate service instances"), id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT EnumerateInstances ( [out] SAFEARRAY (long) * psaInstanceIds );

		[helpstring("VB script version"), id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT EnumerateInstancesVariant ( [out, retval] SAFEARRAY (VARIANT) * psaInstanceIds );

		[helpstring("Create a new service instance"), id(DISPID_IADs_UPPER_BOUND+17)]
			HRESULT CreateInstance ( [in] BSTR pstrMailRoot, [out, retval] long * plInstanceId );

		[helpstring("Delete a service instance"), id(DISPID_IADs_UPPER_BOUND+18)]
			HRESULT DestroyInstance ([in] long lInstanceId );

		[helpstring("Translate an error code into a string"), id(DISPID_IADs_UPPER_BOUND+19)]
			HRESULT ErrorToString ( [in] DWORD lErrorCode, [out, retval] BSTR * pstrError );

        [helpstring("HTML tokenize the given string"), id(DISPID_IADs_UPPER_BOUND+20)]
            HRESULT Tokenize ( [in] BSTR strIn, [out, retval] BSTR * pstrOut );
	};
#endif


#ifndef _ADSIIEX_BUILD
	[
		object,
		uuid(1a04ea82-9414-11d0-906f-00aa00a1eab7),
		dual,
		helpstring("ISmtpAdminService Interface"),
		pointer_default(unique)
	]
	interface ISmtpAdminService : IDispatch
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [in] BSTR strServer );

		// No instance for the server interface

		// Server Properties:

		[propget, helpstring("Server Bindgings"), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServerBindings ( [out, retval] SAFEARRAY (BSTR) * psastrServerBindings );
		[propput, id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServerBindings ( [in] SAFEARRAY (BSTR) sastrServerBindings );

		[propget, helpstring("Server Bindgings"), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT ServerBindingsVariant ( [out, retval] SAFEARRAY (VARIANT) * psastrServerBindings );
		[propput, id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT ServerBindingsVariant ( [in] SAFEARRAY (VARIANT) sastrServerBindings );

		[propget, helpstring("Secure Bindgings"), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT SecureBindings ( [out, retval] SAFEARRAY (BSTR) * psastrSecureBindings );
		[propput, id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT SecureBindings ( [in] SAFEARRAY (BSTR) sastrSecureBindings );

		[propget, helpstring("Secure Bindgings"), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT SecureBindingsVariant ( [out, retval] SAFEARRAY (Variant) * psastrSecureBindings );
		[propput, id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT SecureBindingsVariant ( [in] SAFEARRAY (Variant) sastrSecureBindings );

		[propget, helpstring("TCP/IP Port to Configure"), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT Port ( [out, retval] long * lPort );
		[propput, id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT Port ( [in] long lPort );

		[propget, helpstring("SSL Port to Configure"), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT SSLPort ( [out, retval] long * lSSLPort );
		[propput, id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT SSLPort ( [in] long lSSLPort );

		[propget, helpstring("Outbound Port to Configure"), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT OutboundPort ( [out, retval] long * lOutboundPort );
		[propput, id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT OutboundPort ( [in] long lOutboundPort );

		[propget, helpstring("Smart host to Configure"), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT SmartHost ( [out, retval] BSTR * pstrSmartHost );
		[propput, id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT SmartHost ( [in] BSTR strSmartHost );

		[propget, helpstring("Hop Count to Configure"), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT HopCount ( [out, retval] long * lHopCount );
		[propput, id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT HopCount ( [in] long lHopCount );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT SmartHostType ( [out, retval] long * plSmartHostType );
		[propput, id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT SmartHostType ( [in] long lSmartHostType );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT ShouldDeliver ( [out, retval] BOOL * pfShouldDeliver );
		[propput, id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT ShouldDeliver ( [in] BOOL fShouldDeliver );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT EnableDNSLookup ( [out, retval] BOOL * pfEnableDNSLookup );
		[propput, id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT EnableDNSLookup ( [in] BOOL fEnableDNSLookup );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT PostmasterEmail ( [out, retval] BSTR * pstrPostmasterEmail );
		[propput, id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT PostmasterEmail ( [in] BSTR strPostmasterEmail );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT PostmasterName ( [out, retval] BSTR * pstrPostmasterName );
		[propput, id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT PostmasterName ( [in] BSTR strPostmasterName );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT DefaultDomain ( [out, retval] BSTR * pstrDefaultDomainName );
		[propput, id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT DefaultDomain ( [in] BSTR strDefaultDomainName );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+17)]
			HRESULT FQDN	( [out, retval] BSTR * pstrFQDN	);
		[propput, id(DISPID_IADs_UPPER_BOUND+17)]
			HRESULT FQDN	( [in] BSTR strFQDN );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+18)]
			HRESULT DropDir ( [out, retval] BSTR * pstrDropDir );
		[propput, id(DISPID_IADs_UPPER_BOUND+18)]
			HRESULT DropDir ( [in] BSTR strDropDir );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+19)]
			HRESULT BadMailDir ( [out, retval] BSTR * pstrBadMailDir );
		[propput, id(DISPID_IADs_UPPER_BOUND+19)]
			HRESULT BadMailDir ( [in] BSTR strBadMailDir );
			
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+20)]
			HRESULT PickupDir ( [out, retval] BSTR * pstrPickupDir );
		[propput, id(DISPID_IADs_UPPER_BOUND+20)]
			HRESULT PickupDir ( [in] BSTR strPickupDir );
			
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+21)]
			HRESULT QueueDir ( [out, retval] BSTR * pstrQueueDir );
		[propput, id(DISPID_IADs_UPPER_BOUND+21)]
			HRESULT QueueDir ( [in] BSTR strQueueDir );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+22)]
			HRESULT MaxInConnection ( [out, retval] long * lMaxInConnection );
		[propput, id(DISPID_IADs_UPPER_BOUND+22)]
			HRESULT MaxInConnection ( [in] long lMaxInConnection );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+23)]
			HRESULT MaxOutConnection ( [out, retval] long * lMaxOutConnection );
		[propput, id(DISPID_IADs_UPPER_BOUND+23)]
			HRESULT MaxOutConnection ( [in] long lMaxOutConnection );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+24)]
			HRESULT InConnectionTimeout ( [out, retval] long * lInConnectionTimeout );
		[propput, id(DISPID_IADs_UPPER_BOUND+24)]
			HRESULT InConnectionTimeout ( [in] long lInConnectionTimeout );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+25)]
			HRESULT OutConnectionTimeout ( [out, retval] long * lOutConnectionTimeout );
		[propput, id(DISPID_IADs_UPPER_BOUND+25)]
			HRESULT OutConnectionTimeout ( [in] long lOutConnectionTimeout );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+26)]
			HRESULT MaxMessageSize ( [out, retval] long * lMaxMessageSize );
		[propput, id(DISPID_IADs_UPPER_BOUND+26)]
			HRESULT MaxMessageSize ( [in] long lMaxMessageSize );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+27)]
			HRESULT MaxSessionSize ( [out, retval] long * lMaxSessionSize );
		[propput, id(DISPID_IADs_UPPER_BOUND+27)]
			HRESULT MaxSessionSize ( [in] long lMaxSessionSize );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+28)]
			HRESULT MaxMessageRecipients ( [out, retval] long * lMaxMessageRecipients );
		[propput, id(DISPID_IADs_UPPER_BOUND+28)]
			HRESULT MaxMessageRecipients ( [in] long lMaxMessageRecipients );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+29)]
			HRESULT LocalRetries ( [out, retval] long * lLocalRetries );
		[propput, id(DISPID_IADs_UPPER_BOUND+29)]
			HRESULT LocalRetries ( [in] long lLocalRetries );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+30)]
			HRESULT LocalRetryTime ( [out, retval] long * lLocalRetryTime );
		[propput, id(DISPID_IADs_UPPER_BOUND+30)]
			HRESULT LocalRetryTime ( [in] long lLocalRetryTime );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+31)]
			HRESULT RemoteRetries ( [out, retval] long * lLocalRetries );
		[propput, id(DISPID_IADs_UPPER_BOUND+31)]
			HRESULT RemoteRetries ( [in] long lLocalRetries );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+32)]
			HRESULT RemoteRetryTime ( [out, retval] long * lRemoteRetryTime );
		[propput, id(DISPID_IADs_UPPER_BOUND+32)]
			HRESULT RemoteRetryTime ( [in] long lRemoteRetryTime );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+33)]
			HRESULT ETRNDays ( [out, retval] long * lETRNDays );
		[propput, id(DISPID_IADs_UPPER_BOUND+33)]
			HRESULT ETRNDays ( [in] long lETRNDays );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+34)]
			HRESULT SendDNRToPostmaster ( [out, retval] BOOL * pfSendDNRToPostmaster );
		[propput, id(DISPID_IADs_UPPER_BOUND+34)]
			HRESULT SendDNRToPostmaster ( [in] BOOL fSendDNRToPostmaster );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+35)]
			HRESULT SendBadmailToPostmaster ( [out, retval] BOOL * pfSendBadmailToPostmaster );
		[propput, id(DISPID_IADs_UPPER_BOUND+35)]
			HRESULT SendBadmailToPostmaster ( [in] BOOL fSendBadmailToPostmaster );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+36)]
			HRESULT RoutingDLL ( [out, retval] BSTR * pstrRoutingDLL );
		[propput, id(DISPID_IADs_UPPER_BOUND+36)]
			HRESULT RoutingDLL ( [in] BSTR strRoutingDLL );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+37)]
			HRESULT RoutingSources ( [out, retval] SAFEARRAY (BSTR) * psastrRoutingSources );
		[propput, id(DISPID_IADs_UPPER_BOUND+37)]
			HRESULT RoutingSources ( [in] SAFEARRAY (BSTR) sastrRoutingSources );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+38)]
			HRESULT RoutingSourcesVariant ( [out, retval] SAFEARRAY (Variant) * psastrRoutingSources );
		[propput, id(DISPID_IADs_UPPER_BOUND+38)]
			HRESULT RoutingSourcesVariant ( [in] SAFEARRAY (Variant) sastrRoutingSources );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+39)]
			HRESULT LocalDomains ( [out, retval] SAFEARRAY (BSTR) * psastrLocalDomains);
		[propput, id(DISPID_IADs_UPPER_BOUND+39)]
			HRESULT LocalDomains ( [in] SAFEARRAY (BSTR) sastrLocalDomains );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+40)]
			HRESULT DomainRouting ( [out, retval] SAFEARRAY (BSTR) * psastrDomainRouting );
		[propput, id(DISPID_IADs_UPPER_BOUND+40)]
			HRESULT DomainRouting ( [in] SAFEARRAY (BSTR) sastrDomainRouting );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+41)]
			HRESULT DomainRoutingVariant ( [out, retval] SAFEARRAY (Variant) * psastrDomainRouting );
		[propput, id(DISPID_IADs_UPPER_BOUND+41)]
			HRESULT DomainRoutingVariant ( [in] SAFEARRAY (Variant) sastrDomainRouting );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+42)]
			HRESULT MasqueradeDomain ( [out, retval] BSTR * pstrMasqueradeDomain );
		[propput, id(DISPID_IADs_UPPER_BOUND+42)]
			HRESULT MasqueradeDomain ( [in] BSTR strMasqueradeDomain );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+43)]
			HRESULT SendNdrTo ( [out, retval] BSTR * pstrAddr );
		[propput, id(DISPID_IADs_UPPER_BOUND+43)]
			HRESULT SendNdrTo ( [in] BSTR strAddr );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+44)]
			HRESULT SendBadTo ( [out, retval] BSTR * pstrAddr );
		[propput, id(DISPID_IADs_UPPER_BOUND+44)]
			HRESULT SendBadTo ( [in] BSTR strAddr );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+45)]
			HRESULT RemoteSecurePort ( [out, retval] long * plRemoteSecurePort );
		[propput, id(DISPID_IADs_UPPER_BOUND+45)]
			HRESULT RemoteSecurePort ( [in] long plRemoteSecurePort );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+46)]
			HRESULT AlwaysUseSsl ( [out, retval] BOOL * pfAlwaysUseSsl );
		[propput, id(DISPID_IADs_UPPER_BOUND+46)]
			HRESULT AlwaysUseSsl ( [in] BOOL fAlwaysUseSsl );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+47)]
			HRESULT LimitRemoteConnections ( [out, retval] BOOL * pfLimitRemoteConnections );
		[propput, id(DISPID_IADs_UPPER_BOUND+47)]
			HRESULT LimitRemoteConnections ( [in] BOOL fLimitRemoteConnections );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+48)]
			HRESULT MaxOutConnPerDomain ( [out, retval] long * plMaxOutConnPerDomain );
		[propput, id(DISPID_IADs_UPPER_BOUND+48)]
			HRESULT MaxOutConnPerDomain ( [in] long lMaxOutConnPerDomain );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+49)]
			HRESULT AllowVerify ( [out, retval] BOOL * pfAllowVerify );
		[propput, id(DISPID_IADs_UPPER_BOUND+49)]
			HRESULT AllowVerify ( [in] BOOL fAllowVerify );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+50)]
			HRESULT AllowExpand ( [out, retval] BOOL * pfAllowExpand );
		[propput, id(DISPID_IADs_UPPER_BOUND+50)]
			HRESULT AllowExpand ( [in] BOOL fAllowExpand );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+51)]
			HRESULT BatchMessages ( [out, retval] BOOL * pfBatchMessages );
		[propput, id(DISPID_IADs_UPPER_BOUND+51)]
			HRESULT BatchMessages ( [in] BOOL fBatchMessages );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+52)]
			HRESULT BatchMessageLimit ( [out, retval] long * plBatchMessageLimit );
		[propput, id(DISPID_IADs_UPPER_BOUND+52)]
			HRESULT BatchMessageLimit ( [in] long lBatchMessageLimit );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+53)]
			HRESULT DoMasquerade ( [out, retval] BOOL * pfDoMasquerade );
		[propput, id(DISPID_IADs_UPPER_BOUND+53)]
			HRESULT DoMasquerade ( [in] BOOL fDoMasquerade );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+54)]
			HRESULT Administrators ( [out, retval] SAFEARRAY(BSTR) * psastrAdmins );
		[propput, id(DISPID_IADs_UPPER_BOUND+54)]
			HRESULT Administrators ( [in] SAFEARRAY(BSTR) psastrAdmins );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+55)]
			HRESULT AdministratorsVariant ( [out, retval] SAFEARRAY(Variant) * psastrAdmins );
		[propput, id(DISPID_IADs_UPPER_BOUND+55)]
			HRESULT AdministratorsVariant ( [in] SAFEARRAY(Variant) psastrAdmins );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+56)]
			HRESULT LogFileDirectory ( [out, retval] BSTR * pstrLogFileDirectory );
		[propput, id(DISPID_IADs_UPPER_BOUND+56)]
			HRESULT LogFileDirectory ( [in] BSTR strLogFileDirectory );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+57)]
			HRESULT LogFilePeriod ( [out, retval] long * lLogFilePeriod );
		[propput, id(DISPID_IADs_UPPER_BOUND+57)]
			HRESULT LogFilePeriod ( [in] long lLogFilePeriod );
			
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+58)]
			HRESULT LogFileTruncateSize ( [out, retval] long * lLogFileTruncateSize );
		[propput, id(DISPID_IADs_UPPER_BOUND+58)]
			HRESULT LogFileTruncateSize ( [in] long lLogFileTruncateSize );
			
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+59)]
			HRESULT LogMethod ( [out, retval] long * lLogMethod );
		[propput, id(DISPID_IADs_UPPER_BOUND+59)]
			HRESULT LogMethod ( [in] long lLogMethod );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+60)]
			HRESULT LogType ( [out, retval] long * lLogType );
		[propput, id(DISPID_IADs_UPPER_BOUND+60)]
			HRESULT LogType ( [in] long lLogType );

		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Get server properties")]
			HRESULT Get ( );

		[helpstring("Set server properties")]
			HRESULT Set ( [in, defaultvalue(FALSE)] BOOL fFailIfChanged );
	};
#endif


#ifndef _ADSIIEX_BUILD
	[
		object,
		uuid(1a04ea83-9414-11d0-906f-00aa00a1eab7),
		dual,
		helpstring("ISmtpAdminVirtualServer Interface"),
		pointer_default(unique)
	]
	interface ISmtpAdminVirtualServer : IDispatch
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// other interfaces on virtual server
		[propget, helpstring("ITcpAccess "), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT TcpAccess ( [out, retval] ITcpAccess ** ppTcpAccess );


		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT ServiceInstance ( [out, retval] long * plServiceInstance );
		[propput, id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT ServiceInstance ( [in] long lServiceInstance );

		[propget, helpstring("Virtual Server comment"), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT Comment ( [out, retval] BSTR * pstrComment );
		[propput, id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT Comment ( [in] BSTR strComment );

        [propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+5)]
            HRESULT Bindings ( [out, retval] IServerBindings ** ppBindings );
        [propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+6)]
            HRESULT BindingsDispatch ( [out, retval] IDispatch ** ppBindings );

        [propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+7)]
            HRESULT RoutingSource( [out, retval] IRoutingSource ** ppRoutingSource );
        [propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+8)]
            HRESULT RoutingSourceDispatch ( [out, retval] IDispatch ** ppRoutingSourceDisp );

		[propget, id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT Win32ErrorCode ( [out, retval] long * plWin32ErrorCode );

		// Overridable server properties:

		[propget, helpstring("Server Bindgings"), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT ServerBindings ( [out, retval] SAFEARRAY (BSTR) * psastrServerBindings );
		[propput, id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT ServerBindings ( [in] SAFEARRAY (BSTR) sastrServerBindings );

		[propget, helpstring("Server Bindgings"), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT ServerBindingsVariant ( [out, retval] SAFEARRAY (VARIANT) * psastrServerBindings );
		[propput, id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT ServerBindingsVariant ( [in] SAFEARRAY (VARIANT) sastrServerBindings );

		[propget, helpstring("Secure Bindgings"), id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT SecureBindings ( [out, retval] SAFEARRAY (BSTR) * psastrSecureBindings );
		[propput, id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT SecureBindings ( [in] SAFEARRAY (BSTR) sastrSecureBindings );

		[propget, helpstring("Secure Bindgings"), id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT SecureBindingsVariant ( [out, retval] SAFEARRAY (Variant) * psastrSecureBindings );
		[propput, id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT SecureBindingsVariant ( [in] SAFEARRAY (Variant) sastrSecureBindings );

		[propget, helpstring("TCP/IP Port to Configure"), id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT Port ( [out, retval] long * lPort );
		[propput, id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT Port ( [in] long lPort );

		[propget, helpstring("SSL Port to Configure"), id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT SSLPort ( [out, retval] long * lSSLPort );
		[propput, id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT SSLPort ( [in] long lSSLPort );

		[propget, helpstring("Outbound Port to Configure"), id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT OutboundPort ( [out, retval] long * lOutboundPort );
		[propput, id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT OutboundPort ( [in] long lOutboundPort );

		[propget, helpstring("Hop Count to Configure"), id(DISPID_IADs_UPPER_BOUND+17)]
			HRESULT HopCount ( [out, retval] long * lHopCount );
		[propput, id(DISPID_IADs_UPPER_BOUND+17)]
			HRESULT HopCount ( [in] long lHopCount );

		[propget, helpstring("Smart host to Configure"), id(DISPID_IADs_UPPER_BOUND+18)]
			HRESULT SmartHost ( [out, retval] BSTR * pstrSmartHost );
		[propput, id(DISPID_IADs_UPPER_BOUND+18)]
			HRESULT SmartHost ( [in] BSTR strSmartHost );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+19)]
			HRESULT SmartHostType ( [out, retval] long * plSmartHostType );
		[propput, id(DISPID_IADs_UPPER_BOUND+19)]
			HRESULT SmartHostType ( [in] long lSmartHostType );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+20)]
			HRESULT ShouldDeliver ( [out, retval] BOOL * pfShouldDeliver );
		[propput, id(DISPID_IADs_UPPER_BOUND+20)]
			HRESULT ShouldDeliver ( [in] BOOL fShouldDeliver );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+21)]
			HRESULT EnableDNSLookup ( [out, retval] BOOL * pfEnableDNSLookup );
		[propput, id(DISPID_IADs_UPPER_BOUND+21)]
			HRESULT EnableDNSLookup ( [in] BOOL fEnableDNSLookup );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+22)]
			HRESULT PostmasterEmail ( [out, retval] BSTR * pstrPostmasterEmail );
		[propput, id(DISPID_IADs_UPPER_BOUND+22)]
			HRESULT PostmasterEmail ( [in] BSTR strPostmasterEmail );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+23)]
			HRESULT PostmasterName ( [out, retval] BSTR * pstrPostmasterName );
		[propput, id(DISPID_IADs_UPPER_BOUND+23)]
			HRESULT PostmasterName ( [in] BSTR strPostmasterName );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+24)]
			HRESULT DefaultDomain ( [out, retval] BSTR * pstrDefaultDomainName );
		[propput, id(DISPID_IADs_UPPER_BOUND+24)]
			HRESULT DefaultDomain ( [in] BSTR strDefaultDomainName );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+25)]
			HRESULT FQDN	( [out, retval] BSTR * pstrFQDN	);
		[propput, id(DISPID_IADs_UPPER_BOUND+25)]
			HRESULT FQDN	( [in] BSTR strFQDN );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+26)]
			HRESULT DropDir ( [out, retval] BSTR * pstrDropDir );
		[propput, id(DISPID_IADs_UPPER_BOUND+26)]
			HRESULT DropDir ( [in] BSTR strDropDir );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+27)]
			HRESULT BadMailDir ( [out, retval] BSTR * pstrBadMailDir );
		[propput, id(DISPID_IADs_UPPER_BOUND+27)]
			HRESULT BadMailDir ( [in] BSTR strBadMailDir );
			
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+28)]
			HRESULT PickupDir ( [out, retval] BSTR * pstrPickupDir );
		[propput, id(DISPID_IADs_UPPER_BOUND+28)]
			HRESULT PickupDir ( [in] BSTR strPickupDir );
			
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+29)]
			HRESULT QueueDir ( [out, retval] BSTR * pstrQueueDir );
		[propput, id(DISPID_IADs_UPPER_BOUND+29)]
			HRESULT QueueDir ( [in] BSTR strQueueDir );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+30)]
			HRESULT MaxInConnection ( [out, retval] long * lMaxInConnection );
		[propput, id(DISPID_IADs_UPPER_BOUND+30)]
			HRESULT MaxInConnection ( [in] long lMaxInConnection );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+31)]
			HRESULT MaxOutConnection ( [out, retval] long * lMaxOutConnection );
		[propput, id(DISPID_IADs_UPPER_BOUND+31)]
			HRESULT MaxOutConnection ( [in] long lMaxOutConnection );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+32)]
			HRESULT InConnectionTimeout ( [out, retval] long * lInConnectionTimeout );
		[propput, id(DISPID_IADs_UPPER_BOUND+32)]
			HRESULT InConnectionTimeout ( [in] long lInConnectionTimeout );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+33)]
			HRESULT OutConnectionTimeout ( [out, retval] long * lOutConnectionTimeout );
		[propput, id(DISPID_IADs_UPPER_BOUND+33)]
			HRESULT OutConnectionTimeout ( [in] long lOutConnectionTimeout );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+34)]
			HRESULT MaxMessageSize ( [out, retval] long * lMaxMessageSize );
		[propput, id(DISPID_IADs_UPPER_BOUND+34)]
			HRESULT MaxMessageSize ( [in] long lMaxMessageSize );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+35)]
			HRESULT MaxSessionSize ( [out, retval] long * lMaxSessionSize );
		[propput, id(DISPID_IADs_UPPER_BOUND+35)]
			HRESULT MaxSessionSize ( [in] long lMaxSessionSize );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+36)]
			HRESULT MaxMessageRecipients ( [out, retval] long * lMaxMessageRecipients );
		[propput, id(DISPID_IADs_UPPER_BOUND+36)]
			HRESULT MaxMessageRecipients ( [in] long lMaxMessageRecipients );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+37)]
			HRESULT LocalRetries ( [out, retval] long * lLocalRetries );
		[propput, id(DISPID_IADs_UPPER_BOUND+37)]
			HRESULT LocalRetries ( [in] long lLocalRetries );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+38)]
			HRESULT LocalRetryTime ( [out, retval] long * lLocalRetryTime );
		[propput, id(DISPID_IADs_UPPER_BOUND+38)]
			HRESULT LocalRetryTime ( [in] long lLocalRetryTime );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+39)]
			HRESULT RemoteRetries ( [out, retval] long * lLocalRetries );
		[propput, id(DISPID_IADs_UPPER_BOUND+39)]
			HRESULT RemoteRetries ( [in] long lLocalRetries );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+40)]
			HRESULT RemoteRetryTime ( [out, retval] long * lRemoteRetryTime );
		[propput, id(DISPID_IADs_UPPER_BOUND+40)]
			HRESULT RemoteRetryTime ( [in] long lRemoteRetryTime );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+41)]
			HRESULT ETRNDays ( [out, retval] long * lETRNDays );
		[propput, id(DISPID_IADs_UPPER_BOUND+41)]
			HRESULT ETRNDays ( [in] long lETRNDays );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+42)]
			HRESULT SendDNRToPostmaster ( [out, retval] BOOL * pfSendDNRToPostmaster );
		[propput, id(DISPID_IADs_UPPER_BOUND+42)]
			HRESULT SendDNRToPostmaster ( [in] BOOL fSendDNRToPostmaster );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+43)]
			HRESULT SendBadmailToPostmaster ( [out, retval] BOOL * pfSendBadmailToPostmaster );
		[propput, id(DISPID_IADs_UPPER_BOUND+43)]
			HRESULT SendBadmailToPostmaster ( [in] BOOL fSendBadmailToPostmaster );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+44)]
			HRESULT RoutingDLL ( [out, retval] BSTR * pstrRoutingDLL );
		[propput, id(DISPID_IADs_UPPER_BOUND+44)]
			HRESULT RoutingDLL ( [in] BSTR strRoutingDLL );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+45)]
			HRESULT RoutingSources ( [out, retval] SAFEARRAY (BSTR) * psastrRoutingSources );
		[propput, id(DISPID_IADs_UPPER_BOUND+45)]
			HRESULT RoutingSources ( [in] SAFEARRAY (BSTR) sastrRoutingSources );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+46)]
			HRESULT RoutingSourcesVariant ( [out, retval] SAFEARRAY (Variant) * psastrRoutingSources );
		[propput, id(DISPID_IADs_UPPER_BOUND+46)]
			HRESULT RoutingSourcesVariant ( [in] SAFEARRAY (Variant) sastrRoutingSources );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+47)]
			HRESULT LocalDomains ( [out, retval] SAFEARRAY (BSTR) * psastrLocalDomains);
		[propput, id(DISPID_IADs_UPPER_BOUND+47)]
			HRESULT LocalDomains ( [in] SAFEARRAY (BSTR) sastrLocalDomains );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+48)]
			HRESULT DomainRouting ( [out, retval] SAFEARRAY (BSTR) * psastrDomainRouting );
		[propput, id(DISPID_IADs_UPPER_BOUND+48)]
			HRESULT DomainRouting ( [in] SAFEARRAY (BSTR) sastrDomainRouting );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+49)]
			HRESULT DomainRoutingVariant ( [out, retval] SAFEARRAY (Variant) * psastrDomainRouting );
		[propput, id(DISPID_IADs_UPPER_BOUND+49)]
			HRESULT DomainRoutingVariant ( [in] SAFEARRAY (Variant) sastrDomainRouting );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+50)]
			HRESULT MasqueradeDomain ( [out, retval] BSTR * pstrMasqueradeDomain );
		[propput, id(DISPID_IADs_UPPER_BOUND+50)]
			HRESULT MasqueradeDomain ( [in] BSTR strMasqueradeDomain );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+51)]
			HRESULT SendNdrTo ( [out, retval] BSTR * pstrAddr );
		[propput, id(DISPID_IADs_UPPER_BOUND+51)]
			HRESULT SendNdrTo ( [in] BSTR strAddr );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+52)]
			HRESULT SendBadTo ( [out, retval] BSTR * pstrAddr );
		[propput, id(DISPID_IADs_UPPER_BOUND+52)]
			HRESULT SendBadTo ( [in] BSTR strAddr );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+53)]
			HRESULT RemoteSecurePort ( [out, retval] long * plRemoteSecurePort );
		[propput, id(DISPID_IADs_UPPER_BOUND+53)]
			HRESULT RemoteSecurePort ( [in] long plRemoteSecurePort );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+54)]
			HRESULT AlwaysUseSsl ( [out, retval] BOOL * pfAlwaysUseSsl );
		[propput, id(DISPID_IADs_UPPER_BOUND+54)]
			HRESULT AlwaysUseSsl ( [in] BOOL fAlwaysUseSsl );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+55)]
			HRESULT LimitRemoteConnections ( [out, retval] BOOL * pfLimitRemoteConnections );
		[propput, id(DISPID_IADs_UPPER_BOUND+55)]
			HRESULT LimitRemoteConnections ( [in] BOOL fLimitRemoteConnections );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+56)]
			HRESULT MaxOutConnPerDomain ( [out, retval] long * plMaxOutConnPerDomain );
		[propput, id(DISPID_IADs_UPPER_BOUND+56)]
			HRESULT MaxOutConnPerDomain ( [in] long lMaxOutConnPerDomain );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+57)]
			HRESULT AllowVerify ( [out, retval] BOOL * pfAllowVerify );
		[propput, id(DISPID_IADs_UPPER_BOUND+57)]
			HRESULT AllowVerify ( [in] BOOL fAllowVerify );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+58)]
			HRESULT AllowExpand ( [out, retval] BOOL * pfAllowExpand );
		[propput, id(DISPID_IADs_UPPER_BOUND+58)]
			HRESULT AllowExpand ( [in] BOOL fAllowExpand );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+59)]
			HRESULT BatchMessages ( [out, retval] BOOL * pfBatchMessages );
		[propput, id(DISPID_IADs_UPPER_BOUND+59)]
			HRESULT BatchMessages ( [in] BOOL fBatchMessages );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+60)]
			HRESULT BatchMessageLimit ( [out, retval] long * plBatchMessageLimit );
		[propput, id(DISPID_IADs_UPPER_BOUND+60)]
			HRESULT BatchMessageLimit ( [in] long lBatchMessageLimit );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+61)]
			HRESULT DoMasquerade ( [out, retval] BOOL * pfDoMasquerade );
		[propput, id(DISPID_IADs_UPPER_BOUND+61)]
			HRESULT DoMasquerade ( [in] BOOL fDoMasquerade );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+62)]
			HRESULT Administrators ( [out, retval] SAFEARRAY(BSTR) * psastrAdmins );
		[propput, id(DISPID_IADs_UPPER_BOUND+62)]
			HRESULT Administrators ( [in] SAFEARRAY(BSTR) psastrAdmins );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+63)]
			HRESULT AdministratorsVariant ( [out, retval] SAFEARRAY(Variant) * psastrAdmins );
		[propput, id(DISPID_IADs_UPPER_BOUND+63)]
			HRESULT AdministratorsVariant ( [in] SAFEARRAY(Variant) psastrAdmins );

		[propget, helpstring("Available authentication packages"), id(DISPID_IADs_UPPER_BOUND+64)]
			HRESULT AuthenticationPackages([out, retval] BSTR * pstrAuthPackages);
		[propput, id(DISPID_IADs_UPPER_BOUND+64)]
			HRESULT AuthenticationPackages([in] BSTR strAuthPackages);

		[propget, helpstring("Clear text authentication package"), id(DISPID_IADs_UPPER_BOUND+65)]
			HRESULT ClearTextAuthPackage([out, retval] BSTR * pstrAuthPackages);
		[propput, id(DISPID_IADs_UPPER_BOUND+65)]
			HRESULT ClearTextAuthPackage([in] BSTR strAuthPackages);

		[propget, helpstring("Authentication mechanism, ie: anon, basic, ntlm"), id(DISPID_IADs_UPPER_BOUND+66)]
			HRESULT AuthenticationMethod([out, retval] long *plAuthMethod);
		[propput, id(DISPID_IADs_UPPER_BOUND+66)]
			HRESULT AuthenticationMethod([in] long lAuthMethod);

		[propget, helpstring("Default logon domain for clear text (basic) authentication"), id(DISPID_IADs_UPPER_BOUND+67)]
			HRESULT DefaultLogonDomain([out, retval] BSTR *pstrLogonDomain);
		[propput, id(DISPID_IADs_UPPER_BOUND+67)]
			HRESULT DefaultLogonDomain([in] BSTR strLogonDomain);

		[propget, helpstring("Authentication method used to logon to remote server"), id(DISPID_IADs_UPPER_BOUND+68)]
			HRESULT RouteAction ( [out, retval] long * plRouteAction );
		[propput, id(DISPID_IADs_UPPER_BOUND+68)]
			HRESULT RouteAction ( [in] long lRouteAction );

		[propget, helpstring("User name used to logon to remote server"), id(DISPID_IADs_UPPER_BOUND+69)]
			HRESULT RouteUserName([out, retval] BSTR *pstrRouteUserName);
		[propput, id(DISPID_IADs_UPPER_BOUND+69)]
			HRESULT RouteUserName([in] BSTR strRouteUserName);

		[propget, helpstring("Password used to logon to remote server"), id(DISPID_IADs_UPPER_BOUND+70)]
			HRESULT RoutePassword([out, retval] BSTR *pstrRoutePassword);
		[propput, id(DISPID_IADs_UPPER_BOUND+70)]
			HRESULT RoutePassword([in] BSTR strRoutePassword);

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+71)]
			HRESULT LogFileDirectory ( [out, retval] BSTR * pstrLogFileDirectory );
		[propput, id(DISPID_IADs_UPPER_BOUND+71)]
			HRESULT LogFileDirectory ( [in] BSTR strLogFileDirectory );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+72)]
			HRESULT LogFilePeriod ( [out, retval] long * lLogFilePeriod );
		[propput, id(DISPID_IADs_UPPER_BOUND+72)]
			HRESULT LogFilePeriod ( [in] long lLogFilePeriod );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+73)]
			HRESULT LogFileTruncateSize ( [out, retval] long * lLogFileTruncateSize );
		[propput, id(DISPID_IADs_UPPER_BOUND+73)]
			HRESULT LogFileTruncateSize ( [in] long lLogFileTruncateSize );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+74)]
			HRESULT LogMethod ( [out, retval] long * lLogMethod );
		[propput, id(DISPID_IADs_UPPER_BOUND+74)]
			HRESULT LogMethod ( [in] long lLogMethod );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+75)]
			HRESULT LogType ( [out, retval] long * lLogType );
		[propput, id(DISPID_IADs_UPPER_BOUND+75)]
			HRESULT LogType ( [in] long lLogType );

		// Service-specific properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+76)]
			HRESULT AutoStart ( [out, retval] BOOL * pfAutoStart );
		[propput, id(DISPID_IADs_UPPER_BOUND+76)]
			HRESULT AutoStart ( [in] BOOL fAutoStart );


		//
		//	Service Status Properties:
		//

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+77)]
			HRESULT ServerState ( [out, retval] DWORD * pdwServerState );


		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Get service properties")]
			HRESULT Get ( );

		[helpstring("Set service properties")]
			HRESULT Set ( [in, defaultvalue(FALSE)] BOOL fFailIfChanged );

		[helpstring("Back up flat file version routing table")]
			HRESULT BackupRoutingTable( [in] BSTR strPath );

		[helpstring("")]
			HRESULT Start ( );

		[helpstring("")]
			HRESULT Pause ( );

		[helpstring("")]
			HRESULT Continue ( );

		[helpstring("")]
			HRESULT Stop ( );
	};
#endif


	[
		object,
		uuid(1a04ea84-9414-11d0-906f-00aa00a1eab7),
		dual,
		helpstring("ISmtpAdminSessions Interface"),
		pointer_default(unique)
	]
	interface ISmtpAdminSessions : IADs
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * plServiceInstance );
		[propput, id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [in] long lServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput, id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput, id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [in] BSTR strKeyType );

		// Enumeration Properties:

		[propget, helpstring("Number of current sessions"), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT	Count ( [out, retval] long * plCount );

		// The Session Cursor Properties:

		[propget, helpstring("User id"), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT UserId ( [out, retval] long * plId );

		[propput, helpstring("User id"), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT UserId ( [in] long plId );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT UserName ( [out, retval] BSTR * pstrUsername );

		[propget, helpstring("User's Host Value"), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT Host ( [out, retval] BSTR * pstrHost );

		[propget, helpstring("How long it has connected"), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT ConnectTime ( [out, retval] long * plConnectTime );

		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Retrieves a list of current sessions"), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT Enumerate ( );

		[helpstring("Sets the cursor at the given session. Call Enumerate before calling GetNth"), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT GetNth ( [in] long lIndex );

		[helpstring("Terminates the given session.  Set Username and/or IpAddress before calling."), id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT Terminate ( );

		[helpstring("Terminates all sessions"), id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT TerminateAll ( );

	};


#ifndef _ADSIIEX_BUILD
	[
		object,
		uuid(1a04ea92-9414-11d0-906f-00aa00a1eab7),
		dual,
		helpstring("ISmtpAdminVirtualDirectory Interface"),
		pointer_default(unique)
	]
	interface ISmtpAdminVirtualDirectory : IDispatch
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * plServiceInstance );
		[propput, id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [in] long lServiceInstance );

		// Enumeration properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT Count ( [out, retval] long * plCount );

		// The current virtual directory's properties:
		[propget, helpstring("Email Id to Configure"), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT VirtualName ( [out, retval] BSTR * pstrName );
		[propput, id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT VirtualName ( [in] BSTR strName );

		[propget, helpstring("Alias' domain name to Configure"), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT Directory ( [out, retval] BSTR * pstrPath );
		[propput, id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT Directory ( [in] BSTR strPath );

		[propget, helpstring("Email Id to Configure"), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT User	 ( [out, retval] BSTR * pstrUserName );
		[propput, id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT User	 ( [in] BSTR strUserName );

		[propget, helpstring("Alias' domain name to Configure"), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT Password ( [out, retval] BSTR * pstrPassword );
		[propput, id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT Password ( [in] BSTR strPassword );

		[propget, helpstring("Log Access"), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT LogAccess ( [out, retval] BOOL* pfLogAccess );
		[propput, id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT LogAccess ( [in] BOOL fLogAccess );

		[propget, helpstring("Access Permissions"), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT AccessPermission ( [out, retval] long* plAccessPermission );
		[propput, id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT AccessPermission ( [in] long lAccessPermission );

		[propget, helpstring("Access Permissions"), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT SslAccessPermission ( [out, retval] long* plSslAccessPermission );
		[propput, id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT SslAccessPermission ( [in] long lSslAccessPermission );


		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("")]
			HRESULT GetHomeDirectory ( );

		[helpstring("")]
			HRESULT SetHomeDirectory ( );

		// create new entry
		[helpstring("")]
			HRESULT Create ( );

		// delete current entry
		[helpstring("")]
			HRESULT Delete ( );

		// get property
		[helpstring("Get user properties")]
			HRESULT Get ( );

		// set property
		[helpstring("")]
			HRESULT Set ( );

		// enumeration
		[helpstring("")]
			HRESULT Enumerate ( );

		[helpstring("")]
			HRESULT GetNth ([in] long lIndex );

	};
#endif


	[
		object,
		uuid(1a04ea85-9414-11d0-906f-00aa00a1eab7),
		dual,
		helpstring("ISmtpAdminAlias Interface"),
		pointer_default(unique)
	]
	interface ISmtpAdminAlias : IADs
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * plServiceInstance );
		[propput, id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [in] long lServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput, id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput, id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [in] BSTR strKeyType );

		// Enumeration properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT Count ( [out, retval] long * plCount );

		// The current alias's properties:

		[propget, helpstring("Email Id to Configure"), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT EmailId ( [out, retval] BSTR * pstrEmailId );
		[propput, id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT EmailId ( [in] BSTR strEmailId );


		[propget, helpstring("Alias' domain name to Configure"), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT Domain ( [out, retval] BSTR * pstrDomain );
		[propput, id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT Domain ( [in] BSTR strDomain );


		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT Type ( [out, retval] long * lType );
		[propput, id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT Type ( [in] long lType );


		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("")]
			HRESULT Find (  [in] BSTR wszWildmat, [in] long cMaxResult );

		[helpstring("")]
			HRESULT GetNth ( [in] long lIndex );
	};



	[
		object,
		uuid(1a04ea86-9414-11d0-906f-00aa00a1eab7),
		dual,
		helpstring("ISmtpAdminUser Interface"),
		pointer_default(unique)
	]
	interface ISmtpAdminUser : IADs
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * plServiceInstance );
		[propput, id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [in] long lServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput, id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput, id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [in] BSTR strKeyType );

		// user's properties:

		[propget, helpstring("Email Id to Configure"), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT EmailId ( [out, retval] BSTR * pstrEmailId );
		[propput, id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT EmailId ( [in] BSTR strEmailId );

		[propget, helpstring("Alias' domain name to Configure"), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT Domain ( [out, retval] BSTR * pstrDomain );
		[propput, id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT Domain ( [in] BSTR strDomain );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT MailRoot ( [out, retval] BSTR * pstrMailRoot );
		[propput, id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT MailRoot ( [in] BSTR strMailRoot );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT InboxSizeInMemory ( [out, retval] long * lInboxSizeInMemory );
		[propput, id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT InboxSizeInMemory ( [in] long lInboxSizeInMemory );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT InboxSizeInMsgNumber ( [out, retval] long * lInboxSizeInMsgNumber );
		[propput, id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT InboxSizeInMsgNumber ( [in] long lInboxSizeInMsgNumber );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT AutoForward ( [out, retval] BOOL * pfAutoForward );
		[propput, id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT AutoForward ( [in] BOOL fAutoForward );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT ForwardEmail ( [out, retval] BSTR * pstrForwardEmail );
		[propput, id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT ForwardEmail ( [in] BSTR strForwardEmail );


		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("Set properties to their default values")]
			HRESULT Default ( );

		[helpstring("")]
			HRESULT Create ( );

		[helpstring("")]
			HRESULT Delete ( );

		[helpstring("Get user properties")]
			HRESULT Get ( );

		[helpstring("")]
			HRESULT Set ( );
	}



	[
		object,
		uuid(1a04ea87-9414-11d0-906f-00aa00a1eab7),
		dual,
		helpstring("ISmtpAdminDL Interface"),
		pointer_default(unique)
	]
	interface ISmtpAdminDL : IADs
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * plServiceInstance );
		[propput, id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [in] long lServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput, id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput, id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [in] BSTR strKeyType );


		// The current DL properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT DLName ( [out, retval] BSTR * pstrDLName );
		[propput, id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT DLName ( [in] BSTR strDLName );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT Domain ( [out, retval] BSTR * pstrDomain );
		[propput, id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT Domain ( [in] BSTR strDomain );

		[propget, helpstring("TCP/IP Port to Configure"), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT Type ( [out, retval] long * lType );
		[propput, id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT Type ( [in] long lType );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT MemberName ( [out, retval] BSTR * pstrMemberName );
		[propput, id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT MemberName ( [in] BSTR strMemberName );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT MemberDomain ( [out, retval] BSTR * pstrMemberDomain );
		[propput, id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT MemberDomain ( [in] BSTR strMemberDomain );

		[propget, id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT MemberType ( [out, retval] long * plMemberType );

		// enumeration
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT	Count ( [out, retval] long * plCount );


		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("")]
			HRESULT Create (  );

		[helpstring("")]
			HRESULT Delete (  );

		[helpstring("Get user properties")]
			HRESULT AddMember ( );

		[helpstring("")]
			HRESULT RemoveMember ( );

		[helpstring("")]
			HRESULT FindMembers ([in] BSTR wszWildmat, [in] long cMaxResults );

		[helpstring("")]
			HRESULT GetNthMember ([in] long lIndex );
	};



	[
		object,
		uuid(1a04ea88-9414-11d0-906f-00aa00a1eab7),
		dual,
		helpstring("ISmtpAdminDomain Interface"),
		pointer_default(unique)
	]
	interface ISmtpAdminDomain : IADs
	{
		import "oaidl.idl";

		//////////////////////////////////////////////////////////////////////
		// Properties:
		//////////////////////////////////////////////////////////////////////

		// Which service to configure:

		[propget, helpstring("Computer Name to Configure"), id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [out, retval] BSTR * pstrServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+1)]
			HRESULT Server ( [in] BSTR strServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [out, retval] long * plServiceInstance );
		[propput, id(DISPID_IADs_UPPER_BOUND+2)]
			HRESULT ServiceInstance ( [in] long lServiceInstance );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [out, retval] IADs** ppADs );
		[propput, id(DISPID_IADs_UPPER_BOUND+3)]
			HRESULT IADsPointer ( [in] IADs* pADs );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [out, retval] BSTR * pstrKeyType );
		[propput, id(DISPID_IADs_UPPER_BOUND+4)]
			HRESULT KeyType ( [in] BSTR strKeyType );


		// Enumeration Properties:

		[propget, helpstring("Number of current sessions"), id(DISPID_IADs_UPPER_BOUND+5)]
			HRESULT	Count ( [out, retval] long * plCount );

		// The domain properties:

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT DomainName ( [out, retval] BSTR * pstrDomainName );
		[propput, id(DISPID_IADs_UPPER_BOUND+6)]
			HRESULT DomainName ( [in] BSTR strDomainName );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT ActionType ( [out, retval] long * plType );
		[propput, id(DISPID_IADs_UPPER_BOUND+7)]
			HRESULT ActionType ( [in] long lType );


		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT IsDefault ( [out, retval] BOOL * pfIsDefault );
		[propput, id(DISPID_IADs_UPPER_BOUND+8)]
			HRESULT IsDefault ( [in] BOOL fIsDefault );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT IsLocal ( [out, retval] BOOL * pfIsLocal );
		[propput, id(DISPID_IADs_UPPER_BOUND+9)]
			HRESULT IsLocal ( [in] BOOL fIsLocal );

		// if local domain
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT LDAPServer ( [out, retval] BSTR * pstrLDAPServer );
		[propput, id(DISPID_IADs_UPPER_BOUND+10)]
			HRESULT LDAPServer ( [in] BSTR strLDAPServer );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT DropDir ( [out, retval] BSTR * pstrDropDir );
		[propput, id(DISPID_IADs_UPPER_BOUND+11)]
			HRESULT DropDir ( [in] BSTR strDropDir );


		// this LDAP info is now global to virtual server, not per domain
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT Account ( [out, retval] BSTR * pstrAccount );
		[propput, id(DISPID_IADs_UPPER_BOUND+12)]
			HRESULT Account ( [in] BSTR strAccount );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT Password ( [out, retval] BSTR * pstrPassword );
		[propput, id(DISPID_IADs_UPPER_BOUND+13)]
			HRESULT Password ( [in] BSTR strPassword );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT LDAPContainer ( [out, retval] BSTR * pstrLDAPContainer );
		[propput, id(DISPID_IADs_UPPER_BOUND+14)]
			HRESULT LDAPContainer ( [in] BSTR strLDAPContainer );

		// if remote
		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT UseSSL ( [out, retval] BOOL * pfUseSSL );
		[propput, id(DISPID_IADs_UPPER_BOUND+15)]
			HRESULT UseSSL ( [in] BOOL fUseSSL );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT EnableETRN ( [out, retval] BOOL * pfEnableETRN );
		[propput, id(DISPID_IADs_UPPER_BOUND+16)]
			HRESULT EnableETRN ( [in] BOOL fEnableETRN );

		[propget, helpstring(""), id(DISPID_IADs_UPPER_BOUND+17)]
			HRESULT RoutingDomain ( [out, retval] BSTR * pstrRoutingDomain );
		[propput, id(DISPID_IADs_UPPER_BOUND+17)]
			HRESULT RoutingDomain ( [in] BSTR strRoutingDomain );


		//////////////////////////////////////////////////////////////////////
		// Methods:
		//////////////////////////////////////////////////////////////////////

		[helpstring("")]
			HRESULT Default( );

		[helpstring("Add a new domain")]
			HRESULT Add ( );

		[helpstring("")]
			HRESULT Remove ( );

		[helpstring("Get domain property")]
			HRESULT Get ( );

		[helpstring("")]
			HRESULT Set ( );

		[helpstring("")]
			HRESULT Enumerate ( );

		[helpstring("")]
			HRESULT GetNth ([in] long lIndex );

		[helpstring("")]
			HRESULT GetDefaultDomain ( );

		[helpstring("")]
			HRESULT SetAsDefaultDomain ( );
	};

#ifndef _ADSIISEX_BUILD
    [
    object,
    uuid(f6052b92-2bb6-11d1-bffa-00c04fc307bd),
    dual,
    helpstring("IWebAdminHelper interface"),
    pointer_default(unique)
    ]
    interface IWebAdminHelper : IDispatch
    {
        import "oaidl.idl";

        [helpstring("")]
            HRESULT EnumerateTrustedDomains ( [in] BSTR strServer, [out, retval] SAFEARRAY (VARIANT) * psaTrustedDomains );

        [helpstring("")]
            HRESULT GetPrimaryNTDomain ( [in] BSTR strServer, [out, retval] BSTR * pstrPrimaryDomain );

        [helpstring("")]
            HRESULT DoesNTAccountExist ( [in] BSTR strServer, [in] BSTR strAccountName, [out, retval] VARIANT_BOOL * pbAccountExists );

        [helpstring("")]
            HRESULT CreateNTAccount ( [in] BSTR strServer, [in] BSTR strDomain, [in] BSTR strUsername, [in] BSTR strPassword );

        [helpstring("")]
            HRESULT IsValidEmailAddress ( [in] BSTR strEmailAddress, [out, retval] VARIANT_BOOL * pbValidAddress );

        [helpstring("")]
            HRESULT ToSafeVariableName ( [in] BSTR strValue, [out, retval] BSTR * pstrSafeName );

        [helpstring("")]
            HRESULT FromSafeVariableName ( [in] BSTR strSafeName, [out, retval] BSTR * pstrValue );

        [helpstring("")]
            HRESULT AddToDL ( [in] IDispatch * pDispDL, [in] BSTR strAdsPath );

        [helpstring("")]
            HRESULT RemoveFromDL ( [in] IDispatch * pDispDL, [in] BSTR strAdsPath );

        [helpstring("Call to begin an LDAP search of the given container")]
            HRESULT ExecuteSearch ( [in] IDispatch * pDispRecipients, [in] BSTR strQuery, [in] long cMaxResultsHint );

        [helpstring("Call after ExecuteSearch to get the next result row")]
            HRESULT GetNextRow ( [out, retval] VARIANT_BOOL * pbNextRow );

        [helpstring("Call after calling GetNextRow to get column values")]
            HRESULT GetColumn ( [in] BSTR strColName, [out, retval] BSTR * pstrColValue );

        [helpstring("You must call this after ExecuteSearch")]
            HRESULT TerminateSearch ( );
    };
#endif


	// Class Definitions:

#ifndef _ADSIIEX_BUILD
	[
		uuid(1a04ea89-9414-11d0-906f-00aa00a1eab7),
		helpstring("SmtpAdmin Class")
	]
	coclass CSmtpAdmin
	{
		[default] interface ISmtpAdmin;
	};

	[
		uuid(1a04ea8a-9414-11d0-906f-00aa00a1eab7),
		helpstring("SmtpAdminService Class")
	]
	coclass CSmtpAdminService
	{
		[default] interface ISmtpAdminService;
	};

	[
		uuid(1a04ea8b-9414-11d0-906f-00aa00a1eab7),
		helpstring("SmtpAdminVirtualServer Class")
	]
	coclass CSmtpAdminVirtualServer
	{
		[default] interface ISmtpAdminVirtualServer;
	};

	[
		uuid(1a04ea8d-9414-11d0-906f-00aa00a1eab7),
		helpstring("SmtpAdminVirtualDirectory Class")
	]
	coclass CSmtpAdminVirtualDirectory
	{
		[default] interface ISmtpAdminVirtualDirectory;
	};
#endif

	[
		uuid(1a04ea8c-9414-11d0-906f-00aa00a1eab7),
		helpstring("SmtpAdminSessions Class")
	]
	coclass CSmtpAdminSessions
	{
		[default] interface ISmtpAdminSessions;
	};

	[
		uuid(1a04ea8e-9414-11d0-906f-00aa00a1eab7),
		helpstring("SmtpAdminAlias Class")
	]
	coclass CSmtpAdminAlias
	{
		[default] interface ISmtpAdminAlias;
	};

	[
		uuid(1a04ea8f-9414-11d0-906f-00aa00a1eab7),
		helpstring("SmtpAdminUser Class")
	]
	coclass CSmtpAdminUser
	{
		[default] interface ISmtpAdminUser;
	};
	
	[
		uuid(1a04ea90-9414-11d0-906f-00aa00a1eab7),
		helpstring("SmtpAdminDL Class")
	]
	coclass CSmtpAdminDL
	{
		[default] interface ISmtpAdminDL;
	};

	[
		uuid(1a04ea91-9414-11d0-906f-00aa00a1eab7),
		helpstring("SmtpAdminDomain Class")
	]
	coclass CSmtpAdminDomain
	{
		[default] interface ISmtpAdminDomain;
	};


#ifndef _ADSIIEX_BUILD
    [
        uuid(7f333a96-2bb5-11d1-bffa-00c04fc307bd),
        helpstring("CWebAdminHelper Class")
    ]
    coclass CWebAdminHelper
    {
        [default] interface IWebAdminHelper;
    };
#endif

};

cpp_quote("#endif  // _SMTPADM_IDL_INCLUDED_")
