HOWTO: Send Mail to Remote Exchange Server in ASP with VB DLL
ID: Q176914
|
The information in this article applies to:
-
Collaboration Data Objects (CDO), versions 1.1, 1.2, 1.21
-
Microsoft Visual Basic Learning, Professional, and Enterprise Editions for Windows, version 5.0
-
Microsoft Active Server Pages, version 1.0b
-
Microsoft Internet Information Server versions 3.0, 4.0
-
Microsoft Visual InterDev, version 1.0
SUMMARY
This article describes how to create a Web application that uses an
Hypertext Markup Language (HTML) page, an Active Server Page (ASP) and a
Visual Basic ActiveX .dll to send mail when Microsoft Exchange Server and
Microsoft Internet Information Server are installed on separate machines.
MORE INFORMATION
To use an ActiveX .dll in an ASP page to send mail when the
Internet Information Server (IIS) and Exchange servers are not on the same
computer, you need to set up Windows NT and IIS security so the user can
log onto the Exchange server.
This article provides a step-by-step method that includes all source code
required.
PART 1
Create an NT user group that you grant access to the web.
- On the IIS machine, using "User Manager for Domains" from the
Administrative Tools program group, select User and "New Local Group."
- Type a Group Name (for example, WebBrowsers) and a Description.
- Click the Add button, and select where you want to list the names from,
"Add Individual Users" or Groups. Click OK to return to the main "User
Manager" window.
- Select the WebBrowsers group in the bottom part of the User Manager
window.
- From the User Manager menu, click "Policies", "User Rights."
- Next to Rights, select "Log on Locally."
- Click Add and use the "List Names From" drop-down list box to list names
from MACHINENAME.
- Select the WebBrowsers group and click Add.
- Click OK to clear the "User Rights Policy" dialog box.
You have now created a user group that you will eventually give rights to
the web you will create later in this article.
PART 2
Create the Visual Basic .dll and install to the internet server.
- Create a new Visual Basic ActiveX .dll. Set the Project Properties as
follows:
General tab:
Project Type: ActiveX .dll
Startup Object: (None)
Project Name: CDOMail
Project Description: CDO .dll to send mail
Unattended Execution: Checked
Make tab:
Title: CDOMail
All other settings as desired.
Compile tab:
All settings as desired.
Component tab:
Remote Server: Unchecked
Version Compatibility: Project Compatibility (Change to
Binary Compatibility after compiling
to maintain client-server compatibility.)
- Set the Class properties as follows:
Name: clsSendMail
Instancing 5 - MultiUse
- Reference Olemsg32.dll version 5.0.1458.49 or later or Cdo.dll version
5.5.1664.0 or later.
- Paste the following code into the class module. This code defines a
class with common messaging properties and contains a method that uses
those properties to log onto the user's Exchange Server mailbox, then
creates and sends mail.
Option Explicit
'Requires a reference to OLEMSG32.DLL version 5.0.1458.49 or later
'or CDO.DLL version 5.5.1664.0 or later.
'Local variable(s) to hold property value(s).
Public Recipient As Variant
Public Subject As Variant
Public Text As Variant
Public Mailbox As Variant
Public Server As Variant
Public Sub Send()
Dim objSession As MAPI.Session
Dim objOutbox As Folder
Dim objNewMessage As Message
Dim objRecipients As Recipients
Dim objOneRecip As Recipient
Set objSession = New MAPI.Session
objSession.Logon profileinfo:=Server & _
vbLf & _
Mailbox, _
nomail:=True
Set objOutbox = objSession.Outbox
Set objNewMessage = objOutbox.Messages.Add
Set objRecipients = objNewMessage.Recipients
Set objOneRecip = objRecipients.Add
With objOneRecip
.Name = Recipient
.Type = ActMsgTo
.Resolve ' Get MAPI to determine complete E-mail address.
End With
With objNewMessage
.Subject = Subject
.Text = Text
.Send
End With
End Sub
- Compile to a .dll.
- Create setup files using the Setup Wizard.
- Install the .dll to your IIS computer.
PART 3
Start Visual InterDev and create a new web on your IIS machine.
- On the Microsoft Visual InterDev or Microsoft Developer Studio menu
select File, and then select New.
- Select "Web Project Wizard" from the Projects tab.
- Next, select the location for your Web Server. The location will be the
Web server you intend users to log on to.
- Give the Project a name (for example, CDOMail).
- Select the "Create New Workspace" option and click OK.
- Select the server name from the drop-down list. Click Next. The Wizard
will contact the Web server. Depending on how you have authentication
set up, you may be asked to supply a password.
- Select "Create a New Web" and use CDOMail for the name. You do not
have to select the "Enable full text searching for pages in this web"
check box but it would be convenient if you plan to add this capability
to the Web. Click Finish. The Wizard will create the web and some web
files for you.
- Select Project, Web Permissions from the Visual InterDev menu.
- On the Settings tab, select "Use unique permissions for this Web", and
then click Apply.
- On the Groups tab, use the "Obtain list from" drop-down list box to
select the IIS machine.
- Add the WebBrowsers group and select the "Browse this Web" option.
Click OK until all the dialog boxes are cleared.
PART 4
Add an HTML page to your project.
- Select File, then New from the menu.
- Select HTML Page from the Files tab. Provide a name (for example
CDOMail.HTM) and click OK.
- Select "CDOMail.htm" and paste in the following code, replacing
anything that is there.
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Developer Studio">
<META HTTP-EQUIV="Content-Type" content="text/html;
charset=iso-8859-1">
<TITLE>Document Title</TITLE>
</HEAD>
<BODY BGCOLOR=White>
<H1><CENTER>Test</CENTER></H1>
<P><H2><CENTER>Enter Valid Logon and Exchange
Server</CENTER></H2>
<P>
<FORM ACTION="CDOMail.asp" METHOD="POST" NAME="frmUserData"
OnSubmit="return ValidateData()">
<TABLE>
<TR>
<TD>Mailbox:</TD>
<TD><INPUT TYPE=TEXT VALUE="Mailbox" NAME="txtMailbox"
ALIGN=LEFT></TD>
<TR>
<TD>Exchange Server:</TD>
<TD><INPUT TYPE=TEXT VALUE="Exchange Server" NAME="txtServer"
ALIGN=LEFT></TD>
<TR>
<TD>Recipient:</TD>
<TD><INPUT TYPE=TEXT VALUE="Recipient" NAME="txtRecipient"
ALIGN=LEFT></TD>
<TR>
<TD>Subject:</TD>
<TD><INPUT TYPE=TEXT VALUE="This is the subject."
NAME="txtSubject" ALIGN=LEFT></TD>
<TR>
<TD>Message:</TD>
<TD><TEXTAREA NAME="Name" ROWS=10 COLS=40
WRAP=Physical></TEXTAREA></TD>
</TR>
</TABLE>
<INPUT TYPE=HIDDEN VALUE="None" NAME="hidSource"><BR><P>
<INPUT TYPE=SUBMIT VALUE="OK" NAME="btnSubmit" ALIGN=RIGHT>
<INPUT TYPE="RESET" VALUE="Reset">
</FORM>
</BODY>
</HTML>
PART 5
Add an .asp file to your project.
- Select File, then New from the menu.
- Select "Active Server Page" from the Files tab. Provide a name (for
example, CDOMail.asp) and click OK.
- Select "CDOMail.asp" and paste in the following code replacing,
anything that is there.
<%@ LANGUAGE="VBSCRIPT" %>
<%
If Request.ServerVariables("LOGON_USER") = "" Then
Response.Status = "401 access denied"
Response.End
End If
%>
<%
Response.Write("Logon User = " &
Request.ServerVariables("LOGON_USER") &
"<br>")
bstrProfileInfo = Request.Form("txtServer") & vbLf &
Request.Form("txtMailbox")
response.write bstrProfileInfo %><br><%
%>
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.2//EN">
<HTML>
<HEAD>
</HEAD>
<BODY>
<%
dim MyMail
Response.Write("About to CreateObject CDOMail.clsSendMail.<br>")
Set myMail = CreateObject ("CDOMail.clsSendMail")
Response.Write("CDOMail.clsSendMail Created<br>")
myMail.Server = Request.Form("txtServer")
myMail.Mailbox = Request.Form("txtMailbox")
myMail.Recipient = Request.Form("txtRecipient")
myMail.Subject = Request.Form("txtSubject") & now
myMail.Text=Request.Form("txtMessage")
Response.Write("myMail.Server= " & myMail.Server & "<br>")
Response.Write("myMail.Mailbox= " & myMail.Mailbox & "<br>")
Response.Write("myMail.Recipient= " & myMail.Recipient & "<br>")
Response.Write("myMail.Subject= " & myMail.Subject & "<br>")
Response.Write("myMail.Text= " & myMail.Text & "<br>")
myMail.Send
set myMail = Nothing
Response.Write("Message sent! Check your inbox.<br>")
%>
</BODY>
</HTML>
PART 6
Make sure you have a mail CLIENT on the IIS machine.
If you do not have a mail CLIENT on the IIS machine the user's Web browser
reports this error:
CDOMail error '800a01ad'
ActiveX component can't create object.
Installing either Outlook 8.01 or later or installing the Exchange Client
with the typical setup solves this problem.
PART 7
Test the application.
When you load CDOMail.htm into your browser, you will be prompted to
identify yourself. Provide your DOMAIN\UserName and password. Fill in the
text boxes on the page and click OK.
You should see the .asp file load and write out who the logged on user is,
the profile it is using, and information about the Visual Basic Class that
you previously installed on the IIS machine.
REFERENCES
For additional information about Collaboration Data Objects versus Active
Messaging, please see the following article in the Microsoft Knowledge
Base:
ARTICLE-ID: <LINK TYPE="ARTICLE" VALUE="Q176916">Q176916</LINK>
TITLE : INFO: Active Messaging and Collaboration Data Objects (CDO)
Additional query words:
ActMsg CDO Active Messaging Collaboration Data
Keywords : kbASP100 kbCDO110 kbCDO120 kbCDO121 kbMsg kbVBp500 kbVisID100 kbGrpMsg
Version : WINDOWS:1.0,1.1,1.2,1.21,5.0; :1.0b; winnt:3.0,4.0
Platform : WINDOWS winnt
Issue type : kbhowto
|