Article ID: 266452
Article Last Modified on 4/21/2006
APPLIES TO
- Microsoft Visual InterDev 6.0 Standard Edition, when used with:
- Microsoft Windows 2000 Standard Edition
- Microsoft Windows NT 4.0
This article was previously published under Q266452
SUMMARY
Use of Collaboration Data Objects for Microsoft Windows NT Server (CDONTS) to send e-mail from Active Server Pages (ASP) pages has become very common. By using CDONTS along with other technologies, you can create a Web-based interface that allows users to send attachments with their e-mail. CDONTS executes on the server so the file attachment must be uploaded to the server before it can be attached to the e-mail.
The file upload can be accomplished through the Microsoft Posting Acceptor. The Posting Acceptor is installed on the server and enables a client to post a file to the Web server from the user's computer. This file can then be sent as an attachment to e-mail.
MORE INFORMATION
NOTE: The Simple Mail Transfer Protocol (SMTP) service must be enabled and configured in order to use CDONTS. (See the Internet Information Services documentation for details.)
Steps to Attach a File to a Message
- Create a new Web application project called myEmailWebApp in Microsoft Visual InterDev on the Web server with the Posting Acceptor installed.
- Add an ASP page called Default.asp to the project.
- Delete the code that comes with the page by default.
Add the following code to the page:
<%@ Language=VBScript %> <HTML> <HEAD> <% Dim strServerURL 'Server Name including http:// protocol strServerURL = "http://" + Request.ServerVariables("SERVER_NAME") Dim strServerURLFull 'Path to subweb directory strServerURLFull = strServerURL & "/myEmailWebApp" Dim strTargetURL 'Directory where we will upload our file to strTargetURL = strServerURLFull & "/uploaded_files" Dim strRepostURL 'Path to the page we will display after our file uploads strRepostURL = strServerURLFull & "/SendMail.asp" Dim strPathToPA 'Path to the cpshost.dll strPathToPA = strServerURL & "/Scripts/cpshost.dll" Dim strPostingURL 'Action path for our form strPostingURL = strPathToPA + "?PUBLISH?" + strRepostURL %> </HEAD> <BODY bgcolor="white"> <!--The Form must include the enctype properties set to "multipart/form-data" or the upload will fail. --> <FORM enctype="multipart/form-data" action="<%=strPostingURL %>" method="post" id="form1" name="form1"> <INPUT type="hidden" name="TargetURL" value="<% = strTargetURL %>"> <!--This hidden field is used to determine if a file post is being made.--> <INPUT type="hidden" name="bolAttach" value="true"> <CENTER> <TABLE bgcolor=Gray border=1> <tr> <td>From:</td> <!--Who is this message from.--> <td><INPUT id="FromBox" name="FromBox" maxlength="50" value="myEmail@myDomain.com"></td> <tr> <tr> <!--Who is this message To.--> <td>To:</td> <td><INPUT id="ToBox" name="ToBox" maxlength="50" value="myEmail@myDomain.com"></td> <tr> <tr> <!--This message's Subject.--> <td>Subject:</td> <td><INPUT id="SubjectBox" name="SubjectBox" maxlength="50" value="Email with attachment."> </td> </tr> <tr> <!--This message's body.--> <td colspan="2"><br><br>Message:<br> <TEXTAREA cols="40" id="MessageArea" name="MessageArea" rows="10">Here is the text for this message.</TEXTAREA> <br> </td> </tr> <tr> <td colspan="2" align="Left" valign="center"> Specify File Attachment Paths: </td> </tr> <tr> <!--Path to the file to attach to this message.--> <td colspan="2" align="right" valign="center"> <INPUT name="my_file" type="file" size="20"> <br><br> </td> </tr> <tr> <!--This message's importance.--> <td colspan="2" ><br>Importance Level: <INPUT type="radio" id=optImpo name=optImpo value=0 checked>Low <INPUT type="radio" id=optImpo name=optImpo value=1>Medium <INPUT type="radio" id=optImpo name=optImpo value=2>High <br></td> <tr> <tr> <!--Validating Submit Button.--> <td colspan="2" align="right" valign="center"> <INPUT type="button" value="Send" id="button1" name="button1" LANGUAGE="javascript" onclick="return button1_onclick()"> <INPUT type="reset" value="Reset" id="reset1" name="reset1"> </td> </tr> </TABLE> </CENTER> </FORM> <SCRIPT ID="clientEventHandlersJS" LANGUAGE="javascript"> <!-- function button1_onclick() { //Determine if there is a From address at all. if(form1.FromBox.value =="") { //No from Address -Stop Submission alert("You have not typed a From: Address."); return; } //Determine if there is a To address at all. if(form1.ToBox.value =="") { //No To Address -Stop Submission alert("You have not typed a TO: Address."); return; } //Determine if there is a subject at all. if(form1.SubjectBox.value =="") { //No Subject - Question Submission //Determine if they care. var bolCancel = confirm("You have not typed a Subject continue?\n"); if(bolCancel==false) { //User clicked Cancel -Stop Submission return; } } if(form1.MessageArea.value =="") { //No Message - Question Submission //Determine if they care. var bolStop = confirm("You have not typed a Message continue?\n"); if(bolStop==false) { //User clicked Cancel -Stop Submission return; } } SubmitForm(); } function SubmitForm() { //File counter for the number of files on the Form var FileNumber = 0; //FormMain is set to the form1 of the document var FormMain = document.forms("form1"); //Loop counter var i; //Start at zero and loop until i is equal to the number of //elements in the page. Step i +1 per loop through for (i=0;i<FormMain.elements.length;i++) { if (FormMain.elements[i].name == 'my_file' && FormMain.elements[i].value.length > 0) { FileNumber++; } } //If there are files being posted then send the file to the Posting Acceptor //If not, skip to the send mail page with the Attachment boolean set to false. if(FileNumber==0) { form1.bolAttach.value = "false" form1.action = 'SendMail.asp'; //The encoding must be set to a different type in order to not //use the posting acceptor. form1.encoding = 'application/x-www-form-urlencoded'; form1.submit(); } else { //There are files attached use normal submit. form1.submit(); } }; //--> </SCRIPT> </BODY> </HTML>
- In Visual InterDev right-click the project name in the Project Explorer and choose New Folder from the pop-up menu.
- Name the new folder Uploaded_files.
- Open the Internet Service Manager Console and browse to the Uploaded_files folder that you created.
- Right-click the folder, and then click Properties.
- On the Directory tab select read/write permissions, and then click OK.
- Close the Internet Services Manager.
- Open Windows Explorer and browse to the MyEmailWebApp folder under the Root:\Inetpub\Wwwroot directory.
- Right-click the Uploaded_files folder, and then choose Properties.
- On the Security tab make sure that the Internet guest account has read/write/change permissions on the folder.
- Click OK, and then close Windows Explorer.
- In Visual InterDev, add a second page named SendMail.asp to the Web application.
- Delete the code that comes with the page by default.
Add the following code to the page:
<%@ Language=VBScript %> <HTML> <HEAD> <TITLE>E-mail Sent Confirmation</TITLE> </HEAD> <BODY> <HR> <% 'Dim Message Variables Dim objMsg, strFrom, strTo, strSubject,lngImportance 'Get the values to use with the message from the post. strFrom = lcase(Trim(Request.Form("FromBox"))) strTo = lcase(Trim(Request.Form("ToBox"))) strSubject = Request.Form("SubjectBox") lngImportance = CInt(Request.Form("optImpo")) 'Create the Message Object Set objMsg = Server.CreateObject("CDONTS.NewMail") 'Set the properties of the Message objMsg.From = strFrom objMsg.To = strTo objMsg.Subject = strSubject 'Use the actual Request Object so that you do not over load the string Data type. objMsg.Body = Request.Form("MessageArea") objMsg.Importance = lngImportance 'Determine if we need to attach a file. Dim bolAttachmentPosted bolAttachmentPosted = CBool(Request.Form("bolAttach")) If bolAttachmentPosted Then 'If do then where on the server can we get it FilePathOnServer= Server.MapPath("/myEmailWebApp/uploaded_files") FilePath_Name = FilePathOnServer & "\" & Request.Form("FileName") & Request.Form("FileExtention") 'Attach it objMsg.AttachFile FilePath_Name End If 'Send Message objMsg.Send 'Destroy the object Set objMsg = Nothing 'Determine if there is a file on the server to delete. If bolAttachmentPosted Then Dim FSO 'Create a File System Object Set FSO = server.CreateObject ("Scripting.FileSystemObject") 'Delete the file from the server FSO.DeleteFile FilePath_Name 'Destroy the object Set FSO = Nothing End If 'Write out results Response.Write "The following message was sent via CDO for NTS:" & "<br>" Response.Write "From: " & strFrom & "<br>" Response.Write "To: " & strTo & "<br>" Response.Write "Subject: " & strSubject & "<br>" Response.Write "Importance: " & lngImportance & "<br>" Response.Write "Body: " & Request.Form("MessageArea") & "<br>" %> </BODY> </HTML>
- Click Save All on the toolbar.
- Right-click the Default.asp file, and then select View in Browser.
REFERENCES
For a reference on installing and using the Posting Acceptor, see "Uploading Files: The Posting Acceptor, Part 1" in the MSDN Online Web Workshop:
For additional information, click the article numbers below to view the articles in the Microsoft Knowledge Base:
217425 A Simple ASP Example Using Posting Acceptor
222618 Using ASP and User Names with Posting Acceptor
260317 Configuring the Posting Acceptor to Upload to Remote Servers
189651 Uploading a File to IIS Using a Browser
250384 Posting Acceptor AllowAnonymous Upload Repost Failure on Windows
186204 How To Use CDONTS to Collect and Mail Information from a User
177850 INFO: What is the Difference Between CDO 1.2 and CDONTS?
189945 How To Send HTML Formatted Mail Over SMTP Using CDONTS
Keywords: kbhowto kbscript kbsample KB266452