一个免费的邮件列表源程序(一)
点击次数:26 次 发布日期:2008-11-26 17:50:08 作者:源代码网
|
<%@ Language=JavaScript %> <!--#include file = "include/SetGlobals.asp"--> <!--#include file = "include/DBPath.asp"--> <% // output relevant meta tags Init( "Mail to list" ); // output common top of page Header( "<a href="work.asp">Work</a> --> Mail to list", 3 ); // output page content Content ( ); // output common bottom of page Footer( ); %> <% /* standard page elements */ %> <!--#include file = "utils/Init.asp"--> <!--#include file = "utils/Database.asp"--> <!--#include file = "utils/Header.asp"--> <!--#include file = "utils/Footer.asp"--> <% // ============================================ // the content of this page // ============================================ function Content ( ) { Out ( "<td width="20%"> </td>" ); Out ( "<td width="60%">" ); // if the form has a password, validate it first // so that if it fails we can show the form again var bSubmitted = (Request.Form.Count > 0); // has the form been submitted? if ( bSubmitted ) { // get the password from the form... sPassword = "" + Request.Form ( "password" ); // validate the password and moan if it fails if ( sPassword != sDBPath ) { Out ( "<h3><font color="red">Invalid password!</font></h3>" ); // pretend the form hasn" been sent yet bSubmitted = false; } } // show the form if not submitted yet if ( !bSubmitted ) { Out ( "In <a href="Subscribe.asp">Part 1</a> I showed you how I allowed you to subscribe to my mailing list. Here"s where I can post an email to members of that mailing list." ); Out ( "<p>Strangely, I"m not going to let you do it, but you <i>can</i> get the source code from the bottom of the page, and learn how I did it." ); // here"s the form tag. the action attribute is the name of // the file that will be called with the answer - in this case // it"s the same page. the method can be "post" to send the // form data "behind the scenes" or "get" to appending the // data to the URL in the style page.asp?data1=a&data2=b // // use post most of the time - it"s neater and "get" is limited // in the amount of data that can be sent. Out ( "<form action="MailToList.asp" method="post">" ); // another table to line up the titles and inputs Out ( "<table border="0" cellpadding="0">" ); Out ( "<tr><td align="right" valign="top">" ); Out ( "Password:" ); Out ( "</td><td align="left" valign="top">" ); // a simple text box. we"ll reference it with the name "password" // and show 37 characters on the form. use the maxlength // attribute to set the maximum characters they can enter. // use value="some text" to pre-fill the input with data. Out ( "<input type="password" name="password" size="30"></input>" ); Out ( "</td></tr>" ); Out ( "<tr><td align="right" valign="top">" ); Out ( "Message:" ); Out ( "</td><td align="left" valign="top">" ); // textarea is a multiline text box. specify the size with the // cols and rows attributes. wrap can be "off" (the default) // "physical" or "virtual". as an example, consider the user // typing in the following text in a 40 character wide input: // // "I wonder how this text will appear to the server when I send it?" // // wrap="off" will send it as typed, but the user has to scroll off // to the right to see the text. (Horrid) // // wrap="physical" will physically split the line after the word // "server" and send two lines to the server // // wrap="virtual" will send one line, as typed, but the user // will see the text nicely wrap in the input. Perfect! Out ( "<textarea name="message" cols="30" rows="8" wrap="physical"></textarea>" ); Out ( "</td></tr>" ); Out ( "<tr><td align="right" valign="top">" ); Out ( " " ); Out ( "</td><td align="left" valign="top">" ); // type="submit" provides a submit button to perform the // form action. the button says "Submit" unless you override // with the value attribute. Out ( "<input type="submit" value="Send Mail"></input>" ); Out ( "</td></tr>" ); Out ( "</table>" ); Out ( "</form>" ); } else { // get the message from the form var sMessage = "" + Request.Form ( "message" ); // open the connection DBInitConnection ( ); // get the emails addresses var sSQL = "SELECT Email FROM MailingList;"; DBGetRecords ( sSQL ); var sEmailList = ""; var sSep = ""; while ( !oRecordSet.EOF ) { sEmailList += sSep + oRecordSet ( 0 ); sSep = ";"; oRecordSet.MoveNext ( ); } // free the connection DBReleaseConnection ( ); Email ( "It"s a ShawThing - what"s new?", sEmailList, sMessage ); Out ( "<p>Email sent successfully.<p>" ); } Out ( "Want to see how this form to mail the subscribers was done? Click below to get all the source code!" ); Out ( "<p><center><a href="ShowSource.asp? page=MailToList"><img src="http://www.zzchn.com/edu/20070912/images/source.gif" border=0></a></center>" ); Out ( "</td>" ); Out ( "<td width="20%"> </td>" ); } // ============================================ // email me! // ============================================ function Email ( sSubject, sEmail, sMessage ) { // send an email to the address just to confirm what just happened var oMail = Server.CreateObject ( "CDONTS.NewMail" ); // setup the mail oMail.From = oMail.To = "MailingList@shawthing.com"; oMail.Bcc = sEmail; oMail.Importance = 1; oMail.Subject = sSubject; oMail.Body = sMessage; // send it oMail.Send ( ); // release object oMail = null; } %> utils/Database.asp <% // globals var oConnection; var oRecordSet; var sConnection; // ============================================ // example usage: // DBInitConnection ( ); // // var sSQL = "SELECT * FROM Somewhere"; // // DBGetRecords ( sSQL ); // // ...use oRecordSet // // DBReleaseRecords ( ); // optional step // // DBReleaseConnection ( ); // ============================================ // ============================================ // initializes database variables for first use on page // ============================================ function DBInitConnection ( ) { // don"t open it again if already opened! if ( sConnection != undefined ) return; // get connection object oConnection = Server.CreateObject( "ADODB.Connection" ); // get the database connection string // use MapPath to make relative path into physical path sConnection = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath ( sDBPath ); // open the connection oConnection.Open( sConnection ); // as an attempt at optimization we now open // the recordset here, not in DBGetRecords() oRecordSet = Server.CreateObject ( "ADODB.Recordset" ); } // ============================================ // tidies up after DBInitConnection // ============================================ function DBReleaseConnection ( ) { // don"t release the connection if not connected! if ( sConnection == undefined ) return; // as an attempt at optimization we now close // the recordset here, not in DBReleaseRecords() if ( oRecordSet.State != 0 ) oRecordSet.Close(); oRecordSet = undefined; oConnection.Close(); oConnection = undefined; sConnection = undefined; } // ============================================ // executes the passed in SQL statement // and returns the oRecordSet object // ============================================ function DBGetRecords ( sSQL ) { // remember that this can fail if passed garbage, and hence // "oRecordSet" will already be "closed" oRecordSet = oConnection.Execute( sSQL ); } // ============================================ // tidies up after DBGetRecords // ============================================ function DBReleaseRecords ( ) { // IMPORTANT: THIS FUNCTION INTENTIONALLY BLANK // as an attempt at optimization we now open/close // the recordset with the connection, not separately // so all code was moved to DBReleaseConnection. // it is recommended that you still call this function as soon // as the recordset is finished with. // note that it is assumed by the caller that it is legal // to call DBReleaseConnection without calling this function } %> 源代码网供稿. |
