一. 程序思路

  所有的程序,主要实现两个功能,一、发送邮件;二、上传附件。使用无组件上传程序来上传附件到服务器,在发送完后,将删除服务器上的邮件。实现这两个功能,需要一个数据库来存放邮件内容及附件信息(文件名)。邮件的发送有两种情况:一是,无附件的邮件;二是,有附件的邮件。

  1.发送无附件的邮件。用户根据实际情况来填写收信人、发信人、抄送、密送、SMTP服务器地址、邮件主题、邮件内容等信息,这些信息中,收信人、发信人、邮件主题、邮件内容是必须填写的,否则将收不到邮件。如果SMTP服务器支持SMTP验证,那么你就把你在该邮局的用户名和密码填上。如,你填的发信人地址是xxxx@163.com,因为163的SMTP服务,支持SMTP验证,所以你就要需要你在163的用户名xxxx,密码****,这样才能顺利发送邮件;如,你发信人地址是xxxx@hotmail.com,因为hotmail是不需要SMTP验证的,所以你不用填写用户名和密码。只要记住一点,你的发信的SMTP服务器支持SMTP验证的话,你就要填写相应的用户名和密码。你在填写完表单后,点“发送”按钮就直接发送邮件了。这个过程是在mail.asp和inc_clsEmail.asp完成的。

  2.发送带附件的邮件。这个过程,主要分三步,一、填写表单信息(同上),不过在点“发送”按钮前,需要转到第二步,发送附件。二、此步聚主要是上传附件到服务器。需要服务器支持FSO、Dictionary、Stream等组件。在进入上传附件界面前,先在数据库中创建一条记录,把刚成填的表单信息存在表里,然后选择本地需要本地的rar或zip文件,选好后点“上传”按钮就行了,传完后程序将更新数据库中存入附件文件名和字段的内容并自动跳转到发信页面,发信页面从数据库中读取邮件信息并显示出来,此时点“发送”,就将发送附件了。本过程主要由mail.asp、inc_clsEmail.asp、inc_clsUpload.asp、Upload.asp和Uploadok.asp来完成。

  在这个发信程序中用到的文件清单: 
    attachment.mdb  '邮件信息临时存放库
    install.asp    '在数据库中创建邮件信息临时表
    Mail.asp     '发送邮件
    Upload.asp    '文件上传
    Uploadok.asp   '文件上传成功
    inc_clsEmail.asp '邮件发送类
    inc_clsUpload.asp '无组件上传类
    inc_set.asp    '一些表格颜色的设置

二.建立数据库
  1.打开你的Access建立一个文件名为:attachment.mdb.添加以下字段:
    (1). ID     类型为自动编号(存放邮件信息的ID编号)
    (2). smtpcheck 类型为是/否字段(存放是否需要SMTP验证)
    (3). from    类型为文本字段(存放发信人的Email地址)
    (4). fromname  类型为文本字段(存放发信人的名字)
    (5). to     类型为文本字段(存放收信人的Email地址)
    (6). bcc    类型为文本字段(存放密送人的Email地址)
    (7). cc     类型为文本字段(存放抄送人的Email地址)
    (8). server   类型为文本字段(存放SMTP服务器地址)
    (9). subject  类型为文本字段(存放邮件主题)
    (10). body   类型为备注字段(存放邮件的内容)
    (11). username 类型为文本字段(存放邮箱登录用户名)
    (12). password 类型为文本字段(存放邮箱登录的密码)
    (13). filenames 类型为文本字段(存放附件的文件名)
  注意:可以把字段设置为允许为空。

  当然你可以自己添加你认为需要的字段,如果你把字段名或表名换成其它名称,则对程序也要作出相应的更改,不然会出错。如果你不想手工建表及添加字段,那你可以在浏览器中运行Install.asp文件,它可以自动建表,你就可以偷懒了:)

  2. 在开始编写之前你可以罗列一下要用到的SQL语句.

  1. --搜索出数据库中ID号为1的邮件信息  
  2. SQL = "SELECT * FROM attachment ORDER BY WHERE id=1" 
  3. --这个语句是添加新的临时邮件信息时用到的.  
  4. SQL="INSERT INTO attachment(smtpcheck,from,fromname,to,bcc,cc,server,subject,body,username,  
  5. password,filenames) VALUES(true,'cjj8110@hotmail.com',cjj','cjj8110@hotmail.com','','','','测试','测试邮件件发送程序','cjj8110','********','1,zip,1.rar')"   
  6. --删除表中全部数据。  
  7. SQL = "DELETE FROM attachment" 
  8. --删除表中指定ID的记录  
  9. SQL = "DELETE FROM attachment WHERE id =" & id  
  10. --更新表中,指定ID的filenames字段的内容  
  11. SQL = "UPDATE attachemnt SET filenames='" & filenames & "' WHERE ID=" & id 



三.编写代码
  Install.asp:考虑到手工建表有点麻烦,所以写了这个文件。文件主要用到CREATE TABLE和DROP TABLE语句,不过由于数据库的原因,有些数据库有可能不支持此语句。本文以Access为例,因为ACCESS支持这两条语句,如果还是新手还看不懂那也没关系,以为有机会再研究好了:)。由于不清楚数据库定义了那些关键字,所以在创建表和字段时,都用[]把表名和字段名括起来,即使表名或字段名和数据库的关键字冲突,也不会引起程序出错。不过运行本程序前,必须先在Access中创建一个数据库名称为attachment.mdb,可以不为其创建表,用此程序来创建。

install.asp的源码:

  1. <%  
  2.   '此文件在执行后最好删除,因为如果不注意再次执行的话,将会使数据库的所有数据丢失,切记!  
  3.  
  4.   Dim SYS_strTableName,SYS_strSQL,SYS_objRS  
  5.  
  6.   '需要创建的表的名字  
  7.   SYS_strTableName = "attachment" 
  8.     
  9.    Set objConn = Server.CreateObject("ADODB.Connection")  
  10.  
  11.   'OLEDB方式打开数据库的Connection对象连接字符串  
  12.   strcon="provider=microsoft.jet.oledb.4.0;data source=" & Server.mappath("attachment.mdb")  
  13.   objConn.open strcon'和数据库已经建立连接可对其操作了.  
  14.  
  15.  
  16.   'DROP TABLE是一条从数据库中删除表的SQL语句。有些数据库有可能不支持。  
  17.   SYS_strSQL = "DROP TABLE [" & SYS_strTableName & "]" 
  18.  
  19.   '删除表时,如果有错误出现则跳转执行下语句  
  20.   '因为如果DROP TABLE一个数据库中并不存在的表时,就会导致程序出错,  
  21.   '所以加了这个语句On Error Resume Next  
  22.     
  23.   On Error Resume Next 
  24.     
  25.   objConn.Execute (SYS_strSQL)  
  26.     
  27.   '因为On Error Resume Next比较耗资源,执行这条语句后,下面再出现错误将不会被跳转了也就是On Error Resume Next将不对此后的语句产生作用了,如果不加这句话,就对此后的都起屏蔽错误的作用。  
  28.   On Error Goto 0   
  29.  
  30.   '创建表格的主要是用CREATE TABLE语句  
  31.   'CREATE TABLE tablename (fieldname1 fieldytype1,fieldname2 fieldtype2......)  
  32.   SYS_strSQL = "CREATE TABLE [" & SYS_strTableName & "] (" 
  33.     
  34.   '此为创建自动编号类型的字段id  
  35.   SYS_strSQL = SYS_strSQL & "[id] integer IDENTITY (1, 1) PRIMARY KEY NOT NULL ," 
  36.     
  37.   '创建文本类型的字段smtpcheck,字段类型为是/否类型。  
  38.   SYS_strSQL = SYS_strSQL & "[smtpcheck] yesno," 
  39.     
  40.   '创建文本类型的字段homepage,并限定该字段的长度为50(char(50)实现该功能),允许为空(NULL)  
  41.   SYS_strSQL = SYS_strSQL & "[from] char(50) NULL ," 
  42.   SYS_strSQL = SYS_strSQL & "[fromname] char(50) NULL," 
  43.   SYS_strSQL = SYS_strSQL & "[to] char(50) NULL ," 
  44.   SYS_strSQL = SYS_strSQL & "[bcc] char(50) NULL," 
  45.   SYS_strSQL = SYS_strSQL & "[cc] char(50) NULL ," 
  46.   SYS_strSQL = SYS_strSQL & "[server] char(50) NULL," 
  47.   SYS_strSQL = SYS_strSQL & "[subject] char(50) NULL ," 
  48.   SYS_strSQL = SYS_strSQL & "[body] memo," 
  49.   SYS_strSQL = SYS_strSQL & "[username] char(50) NULL," 
  50.   SYS_strSQL = SYS_strSQL & "[password] char(50) NULL ," 
  51.   SYS_strSQL = SYS_strSQL & "[filenames] char(50) NULL)" 
  52.  
  53.   Set SYS_objRS = objConn.Execute(SYS_strSQL)  
  54.   '显示创建成功信息。  
  55.   Response.Write ("  
  56. <font color=""#ff0000"">" & SYS_strTableName & "</font> 表创建成功!  
  57. ")  
  58. %> 


mail.asp的源码:

  1. <!--#include file="inc_clsEmail.asp"-->  
  2. <%  
  3.   Dim sAction,objMail,strID,strConn,strSQL,objConn,objRS  
  4.   Dim sServer,bSMTPCheck,sSubject,sBody,sFrom,sFromName,sTo,sBCC,sCC,sSMTPCheck,sAddFile,sUsername,sPassword  
  5.  
  6.   sAction = Trim(Request.Form("action"))  
  7.  
  8.   If sAction = "发送" Then 
  9.       Sub DelFiles(filename)  
  10.        Dim objFSO  
  11.     On Error Resume Next 
  12.     Set objFSO = CreateObject("Scripting.FileSystemObject")  
  13.     objFSO.DeleteFile filename  
  14.     If Err.Number <> 0 Then On Error Goto 0  
  15.    End Sub 
  16.  
  17.       Dim MyMail,sReturn,aryTemp,i,sAttachmentPath  
  18.       Dim sFileName,sFilePath,intID  
  19.  
  20.       intID = Trim(Session("Attachment_ID"))  
  21.    If intID = "" THen  
  22.        '去除附件表中的相应附件记录  
  23.        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("attachment.mdb")  
  24.        strSQL = "DELETE FROM [attachment]" 
  25.  
  26.     Set objConn = CreateObject("Adodb.Connection")  
  27.        On Error Resume Next 
  28.        Set objRS = objConn.Execute(strSQL)  
  29.  
  30.     If err.Number <> 0 Then 
  31.         On Error Goto 0  
  32.     End If 
  33.  
  34.     Set objConn = Nothing 
  35.  
  36.        Session("Attachment_ID") = "" 
  37.        Session.Abandon  
  38.  
  39.  
  40.           sSubject  = Trim(Request.Form("subject"))  
  41.        sUsername = Trim(Request.Form("username"))  
  42.        sPassword = TriM(Request.Form("password"))  
  43.           sBody     = Trim(Request.Form("body"))  
  44.           sFrom     = Trim(Request.Form("from"))  
  45.           sFromName = Trim(Request.Form("fromname"))  
  46.           sTo       = Trim(Request.Form("to"))  
  47.           sBCC      = Trim(Request.Form("BCC"))  
  48.           sCC       = Trim(Request.Form("CC"))  
  49.  
  50.        '创建邮件Class  
  51.           Set MyMail = New SWEmail  
  52.  
  53.           '自已设定邮件组件创建字符串  
  54.           'MyMail.SetObject("CDONTS.NewMail")  
  55.           'MyMail.SetObject("JMail.Message")  
  56.           'MyMail.SetObject("JMail.SmtpMail")  
  57.  
  58.           If sBCC <> "" Then MyMail.BCC(sBCC)  '密送  
  59.           If sCC <> "" Then MyMail.CC(sCC)    '抄送  
  60.  
  61.           If sServer <> "" Then MyMail.Server(sServer)  
  62.           '发送的是纯文本邮件,默认为HTML邮件  
  63.           MyMail.IsHTML(False)    
  64.  
  65.           '组件测试  
  66.           MyMail.Check sFrom,sFromName,sTo,sSubject,sBody  
  67.  
  68.     '发送邮件  
  69.     'sReturn = MyMail.Send(sFrom,sFromname,sTo,sSubject,sBody)  
  70.     '释放class占用的资源  
  71.           MyMail.Close  
  72.  
  73.  
  74.     'If sReutrn = True Then  
  75.     '    Response.Write("  
  76. 呵呵,邮件发送成功啦!  
  77. ")  
  78.     'Else  
  79.     '    Response.Write(sReturn)  
  80.     'End If  
  81.     Response.End 
  82.    Else 
  83.        strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("attachment.mdb")  
  84.        strSQL = "SELECT * FROM [attachment] WHERE id=" & intID  
  85.  
  86.     Set objConn = CreateObject("Adodb.Connection")  
  87.     objConn.Open strConn  
  88.  
  89.     Set objRS = objConn.Execute(strSQL)  
  90.  
  91.     sFrom      = objRS("From")  
  92.     sFromname  = objRS("Fromname")  
  93.     sSubject   = objRS("subject")  
  94.     sBody      = objRS("body")  
  95.     sTo        = objRS("to")  
  96.     sAddFile   = objRS("filenames")  
  97.     sBCC       = objRS("bcc")  
  98.     sCC        = objRS("cc")  
  99.     sServer    = objRS("server")  
  100.     sUsername  = objRS("username")  
  101.     sPassword  = objRS("password")  
  102.     bSMTPCheck = objRS("smtpcheck")  
  103.  
  104.        '去除附件表中的相应附件记录  
  105.        strSQL = "DELETE FROM [attachment] WHERE id=" & intID  
  106.        On Error Resume Next 
  107.        Set objRS = objConn.Execute(strSQL)  
  108.        If err.Number <> 0 Then 
  109.         On Error Goto 0  
  110.     End If 
  111.  
  112.     Session("Attachment_ID") = "" 
  113.        Session.Abandon  
  114.          
  115.     objConn.Close  
  116.        Set objConn = Nothing 
  117.  
  118.        '创建邮件Class  
  119.           Set MyMail = New SWEmail  
  120.  
  121.           '自已设定邮件组件创建字符串  
  122.           'MyMail.SetObject("CDONTS.NewMail")  
  123.           'MyMail.SetObject("JMail.Message")  
  124.           'MyMail.SetObject("JMail.SmtpMail")  
  125.  
  126.           If sBCC <> "" Then MyMail.BCC(sBCC)  '密送  
  127.           If sCC <> "" Then MyMail.CC(sCC)    '抄送  
  128.  
  129.           MyMail.AddFile(Replace(sAddFile,",","$"))   '添加附件  
  130.             
  131.     If sServer <> "" Then MyMail.Server(sServer)  
  132.  
  133.           '发送的是纯文本邮件,默认为HTML邮件  
  134.           MyMail.IsHTML(False)  
  135.             
  136.     '组件测试  
  137.           MyMail.Check sFrom,sFromName,sTo,sSubject,sBody  
  138.  
  139.     '发送邮件  
  140.     'sReturn = MyMail.Send(sFrom,sFromname,sTo,sSubject,sBody)  
  141.     '释放class占用的资源  
  142.           MyMail.Close  
  143.  
  144.     'If sReutrn = True Then  
  145.     '    Response.Write("  
  146. 呵呵,邮件发送成功啦!  
  147. ")  
  148.     'Else  
  149.     '    Response.Write(sReturn)  
  150.     'End If  
  151.  
  152.           '删除服务器上的附件  
  153.     sAttachmentPath = Server.Mappath("AttachmentFiles\")  
  154.     If Instr(sAddFile,",") <> 0 Then 
  155.         aryTemp = Split(sAddFile,",")  
  156.      For i = LBound(aryTemp) To UBound(aryTemp)  
  157.          Call DelFiles(sAttachmentPath & "\" & aryTemp(i))  
  158.      Next 
  159.     Else 
  160.         If Trim(sAddFile) <> "" Then 
  161.          Call DelFiles(sAttachmentPath & "\" & sAddFile)  
  162.      End If 
  163.     End If 
  164.  
  165.     Response.End 
  166.    End If 
  167.  
  168.   ElseIf sAction = "附件" Then 
  169.  
  170.       sServer   = Trim(Request.Form("smtpserver"))  
  171.       bSMTPCheck= Trim(Request.Form("smtpcheck"))  
  172.    If (bSMTPCheck = "True") or (bSMTPCheck=TrueThen 
  173.           bSMTPCheck = True 
  174.    Else 
  175.        bSMTPCheck = False 
  176.    End If 
  177.       sSubject  = Trim(Request.Form("subject"))  
  178.    sUsername = Trim(Request.Form("username"))  
  179.    sPassword = TriM(Request.Form("password"))  
  180.       sBody     = Trim(Request.Form("body"))  
  181.       sFrom     = Trim(Request.Form("from"))  
  182.       sFromName = Trim(Request.Form("fromname"))  
  183.       sTo       = Trim(Request.Form("to"))  
  184.       sBCC      = Trim(Request.Form("BCC"))  
  185.       sCC       = Trim(Request.Form("CC"))  
  186.      
  187.    strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("attachment.mdb")  
  188.      
  189.    Set objConn = CreateObject("Adodb.Connection")  
  190.    objConn.Open strConn  
  191.    Set objRS = CreateObject("Adodb.RecordSet")  
  192.  
  193.    If Session("Attachment_ID") <> "" Then 
  194.        strSQL = "SELECT * FROM [attachment] WHERE id=" & Session("Attachment_ID")  
  195.  
  196.        objRS.Open strSQL,objConn,1,2  
  197.    Else 
  198.        strSQL = "SELECT * FROM [attachment]" 
  199.  
  200.        objRS.Open strSQL,objConn,1,2  
  201.        objRS.Addnew  
  202.    End If 
  203.  
  204.    objRS("SmtpCheck") = bSMTPCheck  
  205.    objRS("username")  = sUsername  
  206.    objRS("password")  = sPassword  
  207.       objRS("Server")    = sServer  
  208.    objRS("Subject")   = sSubject  
  209.    objRS("body")      = sBody  
  210.       objRS("from")      = sFrom  
  211.    objRS("fromname")  = sFromname  
  212.    objRS("bcc")       = sBCC  
  213.       objRS("cc")        = sCC  
  214.    objRS("to")        = sTo  
  215.    objRS.Update  
  216.  
  217.    Session("Attachment_ID") = objRS("id")  
  218.  
  219.    objRS.Close  
  220.    Set objRS = Nothing 
  221.    objConn.Close  
  222.    Set objConn = Nothing 
  223.  
  224.    Response.Redirect "upload.asp" 
  225.  
  226.   Else 
  227.      strID = Trim(Session("Attachment_ID"))  
  228.  
  229.       If strID <> "" Then 
  230. '       strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("attachment.mdb")  
  231.        strConn = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("attachment.mdb")  
  232.  
  233.        strSQL = "SELECT * FROM [attachment] WHERE id=" & strID  
  234.      
  235.        Set objConn = Server.CreateObject("Adodb.Connection")  
  236.        objConn.Open strConn  
  237.      
  238.        On Error Resume Next 
  239.        Set objRS = objConn.Execute(strSQL)  
  240.        If err.Number <> 0 Then 
  241.            On Error Goto 0  
  242.         Response.Write("找不到相应的附件,程序将终止运行!")  
  243.         Response.End 
  244.        Else 
  245.            sServer    = objRS("server")  
  246.         bSMTPCheck = objRS("SMTPCheck")  
  247.         sSubject   = objRS("Subject")  
  248.         sBody      = objRS("body")  
  249.            sFrom      = objRS("from")  
  250.         sFromname  = objRS("fromname")  
  251.         sTo        = objRS("to")  
  252.         sBCC       = objRS("bcc")  
  253.            sCC        = objRS("cc")  
  254.         sUsername  = objRS("username")  
  255.            sPassword  = objRS("password")  
  256.      sAddFile   = objRS("filenames")  
  257.        End If 
  258.        objConn.Close  
  259.        Set objConn = Nothing 
  260.       End If 
  261. %>  
  262. <html>  
  263. <head>  
  264. <title>发送</title>  
  265. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  266. <script>  
  267.     function scheck() {  
  268.      if (form1.smtpcheck.checked)  
  269.       form1.smtpcheck.value=true  
  270.   else  
  271.       form1.smtpcheck.value=false;  
  272.  }  
  273. </script>  
  274. </head>  
  275.  
  276. <body bgcolor="#FFFFFF" text="#000000">  
  277. <form name="form1" method="post" action="mail.asp"
  278. 邮件服务器    <input type="text" name="smtpserver" value="<%=sServer%>">
  279. 组件     <input type="text" name="mailobject">
  280. SMTP验证:<%If bSMTPCheck Then%>
  281.     <input type="checkbox" name="smtpcheck" value="true" onclick="scheck();" checked>
  282. <%Else%>
  283.     <input type="checkbox" name="smtpcheck" value="false" onclick="scheck();">
  284. <%End If%>
  285.   
    用户名:<input type="text" name="username" value="<%=sUsername%>">
  286. 密 码:<input type="text" name="password" value="<%=sPassword%>">
  287. 收信人地址 <input type="text" name="to" value="<%=sTo%>">
  288. 发信人地址 <input type="text" name="from" value="<%=sFrom%>">
  289. 发信人姓名 <input type="text" name="fromname" value="<%=sFromName%>">
  290. 抄 送       <input type="text" name="cc" value="<%=sCC%>">
  291. 密 送       <input type="text" name="bcc" value="<%=sBCC%>">
  292. 主 题       <input type="text" name="subject" value="<%=sSubject%>">
  293. 附 件:    <input type="text" name="addfile" value="<%=sAddFile%>">
  294. 内 容      <textarea name="body" rows="20" cols="100"><%=sBody%></textarea>
  295.     <input type="submit" name="action" value="发送">
  296.     <input type="submit" name="action" value="附件">
  297. </form>
  298. </body>
    </html>
  299. <%End If%>

 
inc_clsEmail.asp文件,主要实现了邮件发送的全过程。此类有如下几种方法:a)check,主要是检测服务器支持哪些发信组件,并且发送一封邮件,看看能否成功发送;b)mailerr,主要是返回发送邮件过程中的错误信息;c)server,设置SMTP服务器的地址;d)send,发送邮件;e)BCC,密送邮件;f)CC,抄送邮件;g)addfile,添加附件,可添加多个附件;h)close,释放数据。

inc_clsEmail.asp的代码:

  1. <%Option Explicit  
  2.   '#########声明变量########  
  3.        
  4.   '以下定义邮件组件类型常量  
  5.   Private Const SWEmail_JMail43     = 0  
  6.   Private Const SWEmail_JMail       = 1  
  7.   Private Const SWEmail_ASPEMail    = 2  
  8.   Private Const SWEmail_ASPMail     = 3  
  9.   Private Const SWEmail_EasyWebmail = 4  
  10.   Private Const SWEmail_CMailServer = 5  
  11.   Private Const SWEmail_CDO         = 6  
  12.         
  13.   '本类支持的组件数,由于数组的下标是从0开始的,所以实际是支持7个组件  
  14.   Private Const SWEmail_intMailobjects = 6  
  15.  
  16.   '邮件组件数组  
  17.   ReDim SWEmail_aryMailObject(SWEmail_intMailobjects,2)  
  18.   'JMail 4.3  
  19.   SWEmail_aryMailObject(0,0) = "JMail.Message"  '创建组件的字符串,此字符串固定  
  20.   SWEmail_aryMailObject(0,1) = SWEmail_JMail43  '组件的类型,自定义  
  21.  
  22.   'JMail 早期版本  
  23.   SWEmail_aryMailObject(1,0) = "JMail.SmtpMail" 
  24.   SWEmail_aryMailObject(1,1) = SWEmail_JMail  
  25.  
  26.   'ASP EMail  
  27.   SWEmail_aryMailObject(2,0) = "Persits.MailSender" 
  28.   SWEmail_aryMailObject(2,1) = SWEmail_ASPEMail  
  29.  
  30.   'ASP Mail  
  31.   SWEmail_aryMailObject(3,0) = "smtpsvg.mailer" 
  32.   SWEmail_aryMailObject(3,1) = SWEmail_ASPMail  
  33.     
  34.   'Easy Web Mail  
  35.   SWEmail_aryMailObject(4,0) = "easymail.MailSEnd" 
  36.   SWEmail_aryMailObject(4,1) = SWEmail_EasyWebmail  
  37.  
  38.   'CMail Server  
  39.   SWEmail_aryMailObject(5,0) = "CMailCOM.SMTP.1" 
  40.   SWEmail_aryMailObject(5,1) = SWEmail_CMailServer  
  41.  
  42.   '微软自带的组件  
  43.   SWEmail_aryMailObject(6,0) = "CDONTS.NewMail" 
  44.   SWEmail_aryMailObject(6,1) = SWEmail_CDO  
  45.  
  46.     
  47.   '记录邮件组件创建字符串  
  48.   Private SWEmail_strMailObject  
  49.   '邮件组件的类型  
  50.   Private SWEmail_intMailType  
  51.   '邮件组件的名称(描述)  
  52.   Private strMailName  
  53.   '邮件附件信息  
  54.   Private SWEmail_strFiles  
  55.  
  56.   Private SWEmail_strFrom           '发件人Email地址  
  57.   Private SWEmail_strFromName       '发件人姓名  
  58.   Private SWEmail_strTo             '收件人Email地址  
  59.   Private SWEmail_strSubject        '邮件主题  
  60.   Private SWEmail_strBody           '邮件内容  
  61.  
  62.   Private SWEmail_strBCC            '密送人Email地址  
  63.   Private SWEmail_strCC             '抄送人Email地址  
  64.     
  65.   Private SWEmail_strSMTPServer     '邮件服务器地址  
  66.   Private SWEmail_intSpeed          '邮件等级  
  67.   Private SWEmail_blnIsHTML         '是否HTML邮件,True为HTML邮件,FASLE为纯文本邮件  
  68.   Private SWEmail_strUserName       '身份验证时输入的用户名  
  69.   Private SWEmail_strPassword       '身份验证时输入的密码  
  70.   Private SWEmail_strAttachmentPath '附件路径  
  71.   Private SWEmail_strError          '错误信息  
  72.   '#########声明结束########  
  73.  
  74.  
  75.   '#########数据初始化########  
  76.     
  77.   '默认为普通  
  78.   SWEmail_intSpeed = 1  
  79.  
  80.   '默认为HTML邮件  
  81.   SWEmail_blnIsHTML = True 
  82.     
  83.   '设置默认发件服务器地址  
  84.   'SWEmail_strSMTPServr = "SMTP.163.com"  
  85.     
  86.   '设置默认组件字符串  
  87.   'SWEmail_strMailObject = "JMail.Message"  
  88.     
  89.   '设置附件文件的路径  
  90.   SWEmail_strAttachmentPath = Server.Mappath("attachmentfiles\")  
  91.  
  92.   '#########初始化结束########  
  93.     
  94.   Class SWEmail  
  95.       '检测服务支持的邮件组件  
  96.       Sub Check(sFrom,sFromName,sTo,sSubject,sBody)  
  97.           Dim i,objTest,sReturn  
  98.           Response.Write("<table border=""0"" cellspacing=""1"" cellpadding=""0"" bgcolor=""#000000"" align=""center"" width=""85%"">" & vbcrlf)  
  99.           Response.Write("  <tr align=""center"" height=""30"" bgcolor=""#FFFFFF"">" & vbcrlf)  
  100.           Response.Write("    <td width=""33%"">Name</td>" & vbcrlf &  "    <td>Enable</td>" & vbcrlf & "    <td>IsSent</td>" & vbcrlf)  
  101.           Response.Write("  </tr>" & vbcrlf)  
  102.           For i = 0 To SWEmail_intMailobjects  
  103.               On Error Resume Next 
  104.               Set objTest = CreateObject(CStr(SWEmail_aryMailObject(i,0)))  
  105.               Response.Write("  <tr align=""center"" height=""25"" bgcolor=""#FFFFFF"">" & vbcrlf)  
  106.               Response.Write("    <td>" & SWEmail_aryMailObject(i,0) & "</td>" & vbcrlf)  
  107.               If err.Number <> 0 Then   '查看错误原因  
  108.                   On Error Goto 0  
  109.                   Response.Write(    "    <td>No</td>" & vbcrlf)  
  110.                   Response.Write(    "    <td>No</td>" & vbcrlf)  
  111.               Else 
  112.                   SWEmail_strMailObject = SWEmail_aryMailObject(i,0)  
  113.                   SWEmail_intMailType = SWEmail_aryMailObject(i,1)  
  114.                   Response.Write(    "    <td>Yes</td>" & vbcrlf)  
  115.                   sReturn = Send(sFrom,sFromName,sTo,sSubject,sBody)  
  116.                   If (sReturn = TrueThen 
  117.                       Response.Write("    <td>Success</td>" & vbcrlf)  
  118.                   Else 
  119.                       If sReturn = False Then 
  120.                           Response.Write("    <td>Failed</td>" & vbcrlf)  
  121.                       Else 
  122.                           Response.Write("    <td>" & sReturn & "</td>" & vbcrlf)  
  123.                       End If 
  124.                   End If 
  125.               End If 
  126.               Response.Write("  </tr>" & vbcrlf)  
  127.           Next 
  128.           Response.Write("</table>" & vbcrlf)  
  129.       End Sub 
  130.  
  131.       '自动检测服务器支持的组件并设置,如果成功返回True,否则返回False  
  132.       Function AutoSet()  
  133.           Dim i,objTest  
  134.  
  135.           '没检测到发送邮件的组件  
  136.           AutoSet = False 
  137.  
  138.           SWEmail_strMailObject = "" 
  139.           SWEmail_intMailType = "" 
  140.           For i = 0 To SWEmail_intMailobjects  
  141.               On Error Resume Next 
  142.               Set objTest = CreateObject(SWEmail_aryMailObject(i,0))  
  143.               If err.Number = 0 Then 
  144.                   '只要检测到就退出,不继续检测!  
  145.                   AutoSet = True 
  146.                   SWEmail_strMailObject = SWEmail_aryMailObject(i,0)  
  147.                   SWEmail_intMailType = SWEmail_aryMailObject(i,1)  
  148.                   Exit Function 
  149.               End If 
  150.           Next 
  151.           Set objTest = Nothing 
  152.       End Function 
  153.  
  154.       Function MailErr()  
  155.           MailErr = SWEmail_strError            
  156.       End Function 
  157.         
  158.       '邮件等级设置  
  159.       Sub Speed(str)  
  160.           '0:最慢,1:默认,2,最快  
  161.           If Trim(str) = "" Then 
  162.               str = 1  
  163.           Else 
  164.               str = CInt(str)  
  165.           End If 
  166.  
  167.           Select Case SWEmail_intMailType  
  168.           Case SWEmail_JMail43  
  169.               If str = 0 Then 
  170.                   SWEmail_intSpeed = 5  
  171.               ElseIf str = 1 Then 
  172.                   SWEmail_intSpeed = 3  
  173.               ElseIf str = 2 Then 
  174.                   SWEmail_intSpeed = 1  
  175.               Else 
  176.                   SWEmail_intSpeed = 3  
  177.               End If 
  178.           Case SWEmail_JMail  
  179.               If str = 0 Then 
  180.                   SWEmail_intSpeed = 5  
  181.               ElseIf str = 1 Then 
  182.                   SWEmail_intSpeed = 3  
  183.               ElseIf str = 2 Then 
  184.                   SWEmail_intSpeed = 1  
  185.               Else 
  186.                   SWEmail_intSpeed = 3  
  187.               End If                
  188.           Case SWEmail_CDO  
  189.               SWEmail_intSpeed = str  
  190.           End Select 
  191.       End Sub 
  192.  
  193.       '是否发送HTML邮件  
  194.       Sub IsHTML(bln)  
  195.           SWEmail_blnIsHTML = bln  
  196.       End Sub 
  197.  
  198.       'SMTP服务器地址  
  199.       Sub Server(str)  
  200.           SWEmail_strSMTPServer = str  
  201.       End Sub 
  202.  
  203.       '发信  
  204.       Function Send(from,fromname,go,subject,body)  
  205.           Dim sReturn  
  206.           '发信人的Email地址  
  207.           SWEmail_strFrom     = from  
  208.           '发信人的名字  
  209.           SWEmail_strFromName = fromname  
  210.           '收信人Email地址  
  211.           SWEmail_strTo = go  
  212.           '邮件主题  
  213.           SWEmail_strSubject = subject  
  214.           '邮件内容  
  215.           SWEmail_strBody = body  
  216.  
  217.           sReturn = Execute()  
  218.           If sReturn = True Then 
  219.               Send = True 
  220.           Else 
  221.               Send = sReturn  
  222.           End If 
  223.       End Function 
  224.  
  225.       '密送  
  226.       Sub BCC(str)  
  227.           SWEmail_strBCC = str  
  228.       End Sub 
  229.  
  230.       '抄送  
  231.       Sub CC(str)  
  232.           SWEmail_strCC = str  
  233.       End Sub 
  234.  
  235.       '添加附件  
  236.       Sub AddFile(str)  
  237.           SWEmail_strFiles = str  
  238.       End Sub 
  239.  
  240.       'SMTP验证,只有JMail组件可用  
  241.       Sub SMTPCheck(username,password)  
  242.           SWEmail_strUsername = username  
  243.           SWEmail_strPassword = password  
  244.       End Sub 
  245.  
  246.       '设置邮件组件对象  
  247.       Sub SetObject(str)  
  248.           Dim i  
  249.           For i = 0 To SWEmail_intMailObjects  
  250.               If SWEmail_aryMailObject(i,0) = str Then 
  251.                   SWEmail_strMailObject = str  
  252.                   SWEmail_intMailType = SWEmail_aryMailObject(i,1)  
  253.                   Exit For 
  254.               End If 
  255.           Next 
  256.       End Sub 
  257.  
  258.       '发送邮件主体  
  259.       Function Execute()  
  260.           Dim i,sFilePath,strFileName,strTemp,aryTemp,intUpLimit  
  261.           Dim objMail  
  262.  
  263.           If Trim(SWEmail_strMailObject) = "" Then 
  264.               Execute = "It can't create a null string object." 
  265.               Exit Function 
  266.           End If 
  267.  
  268.           'On Error Resume Next  
  269.  
  270.           Set objMail = CreateObject(SWEmail_strMailObject)  
  271.           If Err.Number <> 0 Then 
  272.               Execute = "Can't create object <font color=""#ff0000"">" & SWEmail_strMailObject & "</font>." 
  273.               Exit Function 
  274.           End If 
  275.  
  276.           Select Case SWEmail_intMailType  
  277.               Case SWEmail_JMail43        'Jmail4.3 发信主体       
  278.                   '屏蔽例外错误  
  279.                   objMail.Silent = True 
  280.                   '启用邮件日志  
  281.                   'objMail.logging = True  
  282.                   objMail.Charset = "GB2312" 
  283.                   objMail.AddRecipient SWEmail_strTo  
  284.                   objMail.AddRecipientBCC SWEmail_strBCC  
  285.                   objMail.AddRecipientCC SWEmail_strCC  
  286.                   objMail.From = SWEmail_strFrom  
  287.                   objMail.MailServerUserName = SWEmail_strUserName  
  288.                   objMail.MailServerPassword = SWEmail_strPassword  
  289.                   objMail.Subject = SWEmail_strSubject  
  290.                   If SWEmail_blnIsHTML = True Then 
  291.                       objMail.ContentType = "text/html" 
  292.                       objMail.HtmlBody = SWEmail_strBody  
  293.                   Else 
  294.                       objMail.Body = SWEmail_strBody  
  295.                   End If 
  296.                   objMail.Priority = SWEmail_intSpeed  
  297.  
  298.                   '发送附件  
  299.                   If Trim(SWEmail_strFiles) <> "" Then 
  300.                       If Instr(SWEmail_strFiles,"$") <> 0 Then 
  301.                           aryTemp = Split(SWEmail_strFiles,"$")  
  302.                           intUpLimit = UBound(aryTemp)  
  303.                           For i = LBound(aryTemp) To intUpLimit  
  304.                               strFileName = Trim(aryTemp(i))  
  305.                               If strFileName <> "" Then 
  306.                                    objMail.AddAttachment (SWEmail_strAttachmentPath & "\" & strFileName)  
  307.                               End If 
  308.                          Next 
  309.                       Else 
  310.                           objMail.AddAttachment (SWEmail_strAttachmentPath & "\" & SWEmail_strFiles)  
  311.                       End If 
  312.                   End If 
  313.  
  314.                   objMail.Send(SWEmail_strSMTPServer)  
  315.                   objMail.Close()  
  316.               Case SWEmail_JMail  
  317.               'Jmail早期版本发信主体  
  318.                   objMail.Silent = True 
  319.                   objMail.logging = True 
  320.                   objMail.Charset = "GB2312" 
  321.                   objMail.ContentType = "text/html" 
  322.                   objMail.ServerAddress = SWEmail_strSMTPServer  
  323.                   objMail.AddRecipient SWEmail_strTo  
  324.                   objMail.AddRecipientBCC SWEmail_strBCC  
  325.                   objMail.AddRecipientCC SWEmail_strCC  
  326.                   objMail.SenderName = SWEmail_strFromName  
  327.                   objMail.Sender = SWEmail_strFrom  
  328.                   objMail.Priority = SWEmail_intSpeed  
  329.                   objMail.Subject = SWEmail_strSubject  
  330.                   objMail.Body = SWEmail_strBody  
  331.  
  332.                   '发送附件  
  333.                   If Trim(SWEmail_strFiles) <> "" Then 
  334.                       If Instr(SWEmail_strFiles,"$") <> 0 Then 
  335.                           aryTemp = Split(SWEmail_strFiles,"$")  
  336.                           intUpLimit = UBound(aryTemp)  
  337.                           For i = LBound(aryTemp) To intUpLimit  
  338.                               strFileName = Trim(aryTemp(i))  
  339.                               If strFileName <> "" Then 
  340.                                    objMail.AddAttachment (SWEmail_strAttachmentPath & "\" & strFileName)  
  341.                               End If 
  342.                          Next 
  343.                       Else 
  344.                           objMail.AddAttachment (SWEmail_strAttachmentPath & "\" & SWEmail_strFiles)  
  345.                       End If 
  346.                   End If 
  347.  
  348.                   objMail.Execute()  
  349.                   objMail.Close  
  350.               Case SWEmail_ASPEMail  
  351.                   'ASPMail组件  
  352.                   If Trim(SWEmail_strServer) <> "" Then objMail.Host = SWEmail_strServer  
  353.                   If Trim(SWEmail_strBCC) <> "" Then objMail.AddBcc SWEmail_strBCC   
  354.                   If Trim(SWEmail_strUsername) <>"" Then objMail.Username = SWEmail_strUsername  
  355.                   If Trim(SWEmail_strPassword) <>"" Then objMail.Password = SWEmail_strPassword  
  356.                   objMail.Subject = SWEmail_strSubject  
  357.                   objMail.From = SWEmail_strFrom  
  358.                   objMail.Body = SWEmail_strBody  
  359.                   objMail.AddAddress SWEmail_strTo  
  360.                   objMail.IsHTML = SWEmail_blnIsHTML   
  361.                   objMail.CharSet = "gb2312" 
  362.                   objMail.Priority = SWEmain_intSpeed  
  363.  
  364.                   '发送附件  
  365.                   If Trim(SWEmail_strFiles) <> "" Then 
  366.                       If Instr(SWEmail_strFiles,"$") <> 0 Then 
  367.                           aryTemp = Split(SWEmail_strFiles,"$")  
  368.                           intUpLimit = UBound(aryTemp)  
  369.                           For i = LBound(aryTemp) To intUpLimit  
  370.                               strFileName = Trim(aryTemp(i))  
  371.                               If strFileName <> "" Then 
  372.                                    objMail.AddAttachment (SWEmail_strAttachmentPath & "\" & strFileName)  
  373.                               End If 
  374.                          Next 
  375.                       Else 
  376.                           objMail.AddAttachment (SWEmail_strAttachmentPath & "\" & SWEmail_strFiles)  
  377.                       End If 
  378.                   End If 
  379.               Case SWEmail_ASPMail  
  380.                   objMail.CusTomCharSet  = "gb2312" 
  381.                   objMail.FromAddress = FromMail  
  382.                   objMail.FromName = FromName  
  383.                   objMail.AddRecipient ToMail, ToMail  
  384.                   If ToMailbcc <> "" Then objMail.AddBCC ToMailbcc, ToMailbcc  
  385.                   objMail.Subject = MailSubject  
  386.                   If MailFormat = "html" Then 
  387.                       objMail.ContentType = "text/html" 
  388.                       objMail.BodyText = MailBody  
  389.                   Else 
  390.                       objMail.BodyText = MailBody  
  391.                   End If 
  392.  
  393.                   '发送附件  
  394.                   If Trim(SWEmail_strFiles) <> "" Then 
  395.                       If Instr(SWEmail_strFiles,"$") <> 0 Then 
  396.                           aryTemp = Split(SWEmail_strFiles,"$")  
  397.                           intUpLimit = UBound(aryTemp)  
  398.                             objMail.ClearAttachments  
  399.                           For i = LBound(aryTemp) To intUpLimit  
  400.                               strFileName = Trim(aryTemp(i))  
  401.                               If strFileName <> "" Then 
  402.                                    objMail.AddAttachment (SWEmail_strAttachmentPath & "\" & strFileName)  
  403.                               End If 
  404.                          Next 
  405.                       Else 
  406.                           objMail.AddAttachment (SWEmail_strAttachmentPath & "\" & SWEmail_strFiles)  
  407.                       End If 
  408.                   End If 
  409.  
  410.                   objMail.Priority = SWEmail_intSpeed  
  411.                   objMail.RemoteHost = SWEmail_strServer  
  412.                   objMail.Timeout = 9999  
  413.                   objMail.SendMail  
  414.                   SWEmail_strError = objMail.Response  
  415.               Case SWEmail_EasyWebmail  
  416.                   objMail.CreateNew SWEmail_strFrom, "temp" 
  417.                   objMail.MailName = SWEmail_strFromName  
  418.                   objMail.EM_To = SWEmail_strTo  
  419.                   If Trim(SWEmail_strBCC) <> "" Then objMail.EM_BCC SWEmail_strBCC  
  420.                   objMail.EM_Subject = SWEmail_strSubject  
  421.                   If SWEmail_IsHTML = true Then 
  422.                       objMail.EM_HTML_Text = SWEmail_strBody  
  423.                       objMail.useRichEditer = true  
  424.                   Else 
  425.                       objMail.EM_Text = SWEmail_strBody  
  426.                   End If 
  427.  
  428.                   objMail.EM_Priority = SWEmail_intSpeed  
  429.                   'If TimeMail Then objMail.EM_TimerSEnd = webmailtime  
  430.                     
  431.                   '发送附件  
  432.                   If Trim(SWEmail_strFiles) <> "" Then 
  433.                       If Instr(SWEmail_strFiles,"$") <> 0 Then 
  434.                           aryTemp = Split(SWEmail_strFiles,"$")  
  435.                           intUpLimit = UBound(aryTemp)  
  436.                           For i = LBound(aryTemp) To intUpLimit  
  437.                               strFileName = Trim(aryTemp(i))  
  438.                               If strFileName <> "" Then 
  439.                                    objMail.AddFromAttFileString = SWEmail_strAttachmentPath & "\" & strFileName  
  440.                               End If 
  441.                          Next 
  442.                       Else 
  443.                           objMail.AddAttFileString = SWEmail_strAttachmentPath & "\" & SWEmail_strFiles  
  444.                       End If 
  445.                   End If 
  446.  
  447.                   If objMail.Send() = FALSE Then 
  448.                       SWEmail_strError= "有错误发生" 
  449.                   End If 
  450.               Case SWEmail_CMailServer  
  451.                   objMail.CreateUserPath("ASPMail")  
  452.                   objMail.Subject = SWEmail_strSubject  
  453.                   objMail.Body = SWEmail_strBody  
  454.                   objMail.To = SWEmail_strTo  
  455.                   objMail.From = SWEmail_strFrom  
  456.                   objMail.SendMail  
  457.                   If Left(objMail.LastResponse, 3) <> "+OK" Then 
  458.                       SWEmail_strError = "错误原因:" & objMail.LastResponse  
  459.                   End If 
  460.               Case SWEmail_CDO  
  461.               '微软自带发信主体  
  462.                   objMail.Subject = SWEmail_strSubject  
  463.                   objMail.From = SWEmail_strFrom  
  464.                   objMail.To = SWEmail_strTo  
  465.                     
  466.                   If SWEmail_blnIsHTML Then 
  467.                       objMail.BodyFormat = 0    '支持HTML  
  468.                   Else 
  469.                       objMail.BodyFormat = 1    '支持纯文本  
  470.                   End If 
  471.  
  472.                   '0 表示将采用 MIME 格式  
  473.                   '1 表示将采用连续的纯文本(默认值)  
  474.                   'objMail.MailFormat = 0  
  475.  
  476.                   objMail.Body = SWEmail_strBody  
  477.  
  478.                   '发送附件  
  479.                   If Trim(SWEmail_strFiles) <> "" Then 
  480.                       If Instr(SWEmail_strFiles,"$") <> 0 Then 
  481.                           aryTemp = Split(SWEmail_strFiles,"$")  
  482.                           intUpLimit = UBound(aryTemp)  
  483.                           For i = LBound(aryTemp) To intUpLimit  
  484.                               strFileName = Trim(aryTemp(i))  
  485.                               If strFileName <> "" Then 
  486.                                   objMail.AttachFile (SWEmail_strAttachmentPath & "\" & strFileName)  
  487.                               End If 
  488.                          Next 
  489.                       Else 
  490.                           objMail.AttachFile (SWEmail_strAttachmentPath & "\" & SWEmail_strFiles)  
  491.                       End If 
  492.                   End If 
  493.                     objMail.Send  
  494.           End Select 
  495.           If Err.Number <> 0 Then 
  496.               If Trim(err.Description) <> "" Then Execute = Err.Description & "  
  497. "  
  498.           Else 
  499.               Execute = True 
  500.           End If 
  501.           Set objMail = Nothing 
  502.       End Function 
  503.  
  504.       '清空内容  
  505.       Sub Close()  
  506.           SWEmail_strMailObject = "" 
  507.           SWEmail_intMailType = "" 
  508.           strMailName = "" 
  509.           SWEmail_strFiles = "" 
  510.     
  511.           SWEmail_intSpeed = "" 
  512.           '释放数组  
  513.             Erase SWEmail_aryMailObject  
  514.       End Sub 
  515.   End Class 
  516. %> 


upload.asp的源码:

  1. <%  
  2.   If Trim(Request.ServerVariables("HTTP_REFERER"))="" Then  
  3. 'Response.Write(Request.ServerVariables("HTTP_REFERER"))  
  4. 'Response.End  
  5.       Response.Redirect "mail.asp"  
  6.    Response.End  
  7.   End If  
  8. %> 
  9. <!--#include file="inc_set.asp"--> 
  10. <html> 
  11. <head> 
  12. <title>文件上传</title> 
  13. <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
  14. <style type="text/css"> 
  15. <!--  
  16. .tx {  height: 16px; width: 30px; border-color: black black #000000; border-top-width: 0px; border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; font-size: 9pt; background-color: <%=clrGeneralTR%>; color: #0000FF}  
  17. .tx1 { height: 20px; width: 30px; font-size: 9pt; border: 1px solid; border-color: black black #000000; color: #0000FF}  
  18. --> 
  19. </style> 
  20. </head> 
  21.  
  22. <body topmargin="0"> 
  23. <table border="1"> 
  24. <tr> 
  25. <td> 
  26.  
  27.       
  28. <form name="form1" method="post" action="uploadok.asp" enctype="multipart/form-data"> 
  29.   <table width="88%" border="0" cellspacing="1" cellpadding="0" align="center"> 
  30.       
  31.  <tr bgcolor="<%=clrTitleTR%>">   
  32.       <td height="28" align="center" valign="middle" bgcolor="<%=clrTitleTR%>"><b>文件上传</b></td> 
  33.     </tr> 
  34.     <tr align="left" valign="middle" bgcolor="<%=clrGeneralTR%>">   
  35.       <td height="92">   
  36.         <script language="javascript"> 
  37. <!--  
  38.    function setid()  
  39.    {  
  40.    str='  
  41. ';  
  42.    if(!window.form1.upcount.value)  
  43.     window.form1.upcount.value=1;  
  44.     for(i=1;i<=window.form1.upcount.value;i++)  
  45.       str+='文件'+i+':<input type="file" name="file'+i+'" style="width:350" class="tx1">    文件重命名:<input type="text" name="filename'+i+'" style="width:100" class="tx"> 
  46.  
  47. ';  
  48.    window.upid.innerHTML=str+'  
  49. ';  
  50.    }  
  51. file://--> 
  52.    </script> 
  53.                 <li> 需要上传的个数   
  54.           <input type="text" name="upcount" class="tx" value="2"> 
  55.           <input type="button" name="Button" class="button" onclick="setid();" value="设置"> 
  56.         </li> 
  57.       </td> 
  58.     </tr> 
  59.     <tr align="center" valign="middle" bgcolor="<%=clrGeneralTR%>">   
  60.       <td align="left" id="upid" height="122"> 文件1:   
  61.         <input type="file" name="file1" style="width:200" class="tx1" value="">    
  62. <input type="text" name="filename1" style="width:30" class="tx"> 
  63.       </td> 
  64.     </tr> 
  65.     <tr align="center" valign="middle" bgcolor="<%=clrTitleTR%>">   
  66.       <td height="28" bgcolor="<%=clrTitleTR%>"></td> 
  67.     </tr> 
  68.  <tr> 
  69.      <td> 
  70.       <input type="submit" name="action" value="上传" class="button"> 
  71.   </td> 
  72.  </tr> 
  73.   </table> 
  74. </form> 
  75.          
  76. </td> 
  77. </tr> 
  78. </table> 
  79. </body> 
  80. </html> 
  81. <script language="javascript"> 
  82. <!--  
  83. setid();  
  84. file://--> 
  85. </script> 

uploadok.asp的源码:

  1. <%Option Explicit  
  2.   Response.Expires = 0  
  3. %>  
  4. <!--#include file="inc_clsUpload.asp"-->  
  5. <%  
  6.   Private Function FormatStr(str)  
  7.       str = Trim(BinToStr(str))  
  8.       str = Replace(str,"'","''")   
  9.    str = Replace(str,vbcrlf,"")  
  10.       FormatStr = str  
  11.   End Function 
  12.  
  13.   '设置文件上传路径,此目录必须存在,否则会出错  
  14.   Private Const svrUploadFilePath = "attachmentfiles" 
  15.  
  16.   Dim strNewName,sNewname,strSQL,strNoPic,strInfo,strFileName,strFilePath  
  17.   Dim intFormSize,intFileCount,I  
  18.   Dim binFormData,binTextData,binFileData  
  19.   Dim aryFileName  
  20.   Dim objUpload  
  21.  
  22.   '获取表单数据的大小  
  23.   intFormSize = Request.TotalBytes  
  24.  
  25.   '获取所有的表单数据  
  26.   binFormData = Request.BinaryRead(intFormSize)  
  27.   '创建上传类  
  28.   Set objUpload = New Upload  
  29.     
  30.   '初始化表单提交的数据中  
  31.   objUpload.Init(binFormData)  
  32.  
  33.   '清空数据  
  34.   binFormData = "" 
  35.   strInfo = "" 
  36.  
  37.   intFileCount = objUpload.FileCount  
  38.     
  39.   '设置上传文件存放的路径  
  40.   objUpload.SetPath(svrUploadFilePath)  
  41.  
  42.   '获取上传文件的存放路径  
  43.   'strFilePath = objUpload.GetPath  
  44.  
  45.   '设置允许上传的文件格式,多种格式以|分隔  
  46.   objUpload.AllowFiles ("zip|rar|jpg|png|bmp|txt|htm|html")   
  47.  
  48.   '获取默认文件名列表  
  49.   strFileName = objUpload.FileName  
  50.   aryFileName = Split(strFileName,",")  
  51.  
  52.   If intFileCount > 1 Then 
  53.       For i = 1 To intFileCount  
  54.        sNewname = objUpload.FormName("filename" & i)  
  55.     If sNewname = "" Then sNewname = aryFileName(i-1)  
  56.        If strNewname = "" Then 
  57.               strNewname = strNewname & sNewname  
  58.           Else 
  59.         strNewname = strNewname & "," & sNewname  
  60.     End If 
  61.    Next 
  62.   Else 
  63.       strNewname = objUpload.FormName("filename1")  
  64.   End If 
  65.  
  66.   '清空文本内容  
  67.   binTextData = "" 
  68.   Dim strAttachmentFiles  
  69.  
  70.   If strInfo = "" Then 
  71.       If strNewName = "" Then strNewName = strFileName  
  72.       If objUpload.FileExist(strNewName) Then'如果文件不存在,则保存文件  
  73.           If objUpload.SaveFile(strNewName) Then 
  74.         strAttachmentFiles = strAttachmentFiles & strNewName & "," 
  75. '        strInfo = strInfo  & objUpload.ErrorInfo  
  76. '          Else  
  77. '        strInfo = strInfo &  objUpload.ErrorInfo  
  78.           End If 
  79. '   Else  
  80. '       strInfo = strInfo & objUpload.ErrorInfo  
  81.       End If 
  82.   End If 
  83.  
  84.   Dim oConn,oRS,sConn  
  85.  
  86.   strSQL = "UPDATE [attachment] SET filenames='" & Left(strAttachmentFiles,Len(strAttachmentFiles)-1) & "' WHERE id=" & Session("Attachment_ID")  
  87.  
  88.  
  89.   sConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("attachment.mdb")  
  90. '   sConn = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.Mappath("attachment.mdb")  
  91.    Set oConn = CreateObject("Adodb.Connection")  
  92.  
  93.   oConn.Open sConn  
  94.   Set oRS = oConn.Execute(strSQL)  
  95.   Set oConn = Nothing 
  96.   Response.Redirect "mail.asp" 
  97.   Response.End 
  98. %> 

inc_clsUpload.asp的源码:

  1. <%  
  2.    '*****************************************  
  3.    ' 目的:    将Binary字符转成String。  
  4.    ' 输入:    str:   需要转换Binary。  
  5.    ' 返回:    转换后的String,并把string中的'替换成'',换行符去掉。  
  6.    '*****************************************  
  7.    Private Function BinToStr(str)  
  8.        Dim i,strTemp  
  9.        strTemp = "" 
  10.        For i=1 To LenB(str)  
  11.            If AscB(MidB(str, i, 1)) > 127 Then 
  12.                strTemp = strTemp & Chr(Ascb(MidB(str, i, 1))*256+Ascb(MidB(str, i+1, 1)))  
  13.                i = i + 1  
  14.            Else 
  15.                strTemp = strTemp & Chr(AscB(MidB(str, i, 1)))  
  16.            End If 
  17.        Next 
  18.        strTemp = Replace(Replace(Trim(strTemp),"'","''"),VBCRLF,"")  
  19.        BinToStr=strTemp  
  20.    End Function 
  21.  
  22.    '*****************************************  
  23.    ' 目的:    将String转成Binary。  
  24.    ' 输入:    str:   需要转换的String。  
  25.    ' 返回:    转换后的二进制字符串。  
  26.    '*****************************************  
  27.    Private Function StrToBin(str)  
  28.        Dim i, binTemp  
  29.        For i = 1 To Len(str)  
  30.            binTemp = binTemp & ChrB(Asc(Mid(str,I,1)))  
  31.        Next   
  32.        StrToBin = binTemp  
  33.    End Function 
  34.      
  35.    Class Upload  
  36.     '文件名、文件路径、错误信息、文件信息、允许上传的文件后缀名  
  37.        Dim strFileName,strFilePath,strErrorInfo,strFileInfo,strAllowed  
  38.     '文件开始位置、文件大小、文件个数  
  39.        Dim intFileStart,intFileSize,intFileCount  
  40.     'AdoStream对象objData和Dictionary对象objFiles  
  41.        Dim objData,objFiles  
  42.     '二进制数据  
  43.     Dim binTxtData  
  44.  
  45.        '以上变量均为Class级变量,可在此Class的所有过程函数中使用  
  46.  
  47.        '*****************************************  
  48.        ' 目的:    将文件与文本数据分离,保存文件到Dictionary对象  
  49.        ' 输入:    formdata:  为表单提交的所有数据           
  50.        ' 返回:    无  
  51.        '*****************************************  
  52.        Sub Init(formdata)  
  53.            Dim BnCrlf,binName,binFileName,binQuotation,binSpace,binFileContent  
  54.            Dim sStart,sInfo,sFileName,sFormName,sFormValue  
  55.            Dim iStart,iFormStart,iFormEnd,iInfoStart,iInfoEnd,iFindStart,iFindEnd,iValStart,iValEnd,iFileName   
  56.         
  57.         Set objFiles = Server.CreateObject("Scripting.Dictionary")  
  58.         Set objData = Server.CreateObject("Adodb.Stream")  
  59.            objData.Type = 1  
  60.            objData.Mode = 3  
  61.            objData.Open  
  62.            objData.Write formdata  
  63.       
  64.            BnCrlf = ChrB(13) & ChrB(10)  
  65.            binName = StrToBin("name=""")  
  66.            binFileName = StrToBin("filename=""")  
  67.            binQuotation = StrToBin("""")  
  68.            binSpace = StrToBin(" ")  
  69.            intFileCount = 0    '文件个数清零  
  70.  
  71.            iFormEnd = LenB(formdata)  
  72.            iFormStart = 1  
  73.            '-----------------------------7d320717017a  
  74.            sStart = MidB(formdata,1,InStrB(1,formdata,bnCrlf)-1)  
  75.       
  76.            iStart = LenB(sStart)  
  77.            iFormStart = iFormStart+iStart+1  
  78.            While iFormStart + 10 < iFormEnd  
  79.                iInfoEnd = InStrB(iFormStart,formdata,BnCrlf&BnCrlf)+1  
  80.          sInfo = MidB(formdata,iFormStart,iInfoEnd-iFormStart)  
  81.  
  82.          'Find form name  
  83.          iFormStart = InStrB(iInfoEnd,formdata,sStart)  
  84.                iFindStart = InStrB(11,sInfo,binName,1)  
  85.                iFindEnd = InStrB(iFindStart+6,sInfo,binQuotation,1)  
  86.  
  87.          sFormName = MidB(sInfo,iFindStart,iFindEnd-iFindStart)  
  88.                '取得表单值起始位置  
  89.                iValStart = iInfoEnd + 1  
  90.                '如果是文件  
  91.             If InStrB (22,sInfo,binFileName,0) > 0 Then 
  92.              '取得文件名  
  93.              iFindStart = InStrB(iFindEnd,sInfo,binFileName,0) + 10  
  94.             iFindEnd = InStrB(iFindStart,sInfo,binQuotation,1)  
  95.             sFileName = MidB(sInfo,iFindStart,iFindEnd-iFindStart)  
  96.       sFileName = BinToStr(sFileName)  
  97.                   iFileName = InstrRev(sFileName,"\",-1) + 1  
  98.                   sFileName = Mid(sFileName,iFileName,Len(sFileName)-iFileName + 1)  
  99.       If Trim(strFileName) <> "" Then 
  100.           strFileName = strFileName & "," & sFileName  
  101.       Else 
  102.           strFileName = sFileName  
  103.       End If 
  104.          '文件开始位置  
  105.          intFileStart = iInfoEnd  
  106.          '文件大小  
  107.          intFileSize = iFormStart -iInfoEnd  
  108.                   '文件内容  
  109.       'binFileContent = MidB(formdata,intFileStart,intFileSize)  
  110.                     
  111.       '添加文件,以文件名为关键字  
  112.       If Not objFiles.Exists(sFileName) Then 
  113.                 objFiles.Add sFileName,intFileStart & "," & intFileSize  
  114.       Else 
  115.           strErrorInfo = strErrorInfo & "  
  116. 文件 <b>" & sFileName & "</b> 已经存在!"  
  117.        Exit Sub 
  118.             End If 
  119.  
  120.       '统计文件个数  
  121.       intFileCount = intFileCount + 1  
  122.             Else  '如果是表单项目  
  123.           iValEnd = iFormStart-iInfoEnd-3  
  124.           If iValEnd> 0 Then 
  125.            sFormValue = MidB(formdata,iValStart,iValEnd)  
  126.           Else 
  127.              sFormValue = "" 
  128.           End If 
  129.           binTxtData = binTxtData & sFormname & StrToBin(":") & sFormValue & StrToBin("""")  
  130.             End If 
  131.          iFormStart=iFormStart + iStart + 1  
  132.         Wend  
  133.         formdata="" 
  134.        End Sub 
  135.  
  136.     '*****************************************  
  137.        ' 目的:    限制文件上传的类型,只能许sAllow格式的文件  
  138.        ' 输入:    strLimit,允许上传的文件格式,多种格式用|分开  
  139.     '            
  140.        ' 返回:    允许上传的文件格式(多种格式用|分开)  
  141.        '*****************************************  
  142.        Sub AllowFiles(sAllow)  
  143.         strAllowed = sAllow  
  144.     End Sub 
  145.  
  146.     '*****************************************  
  147.        ' 目的:    检查文件后缀是否为被允许的文件格式  
  148.        ' 输入:    filename  
  149.     '            
  150.        ' 返回:    如果是允许的文件格式返回True,否则返回False     
  151.        '*****************************************  
  152.        Function IsAllowed(filename)  
  153.         Dim intStart  
  154.         IsAllowed = False 
  155.      If strAllowed = "" Then 
  156.          IsAllowed = True 
  157.      Else 
  158.          filename=Trim(filename)  
  159.              If Trim(filename) <> "" Then          
  160.              intStart = InstrRev(filename,".")  
  161.        If intStart > 0 Then 
  162.               If Instr(strAllowed,Mid(filename,intStart+1,Len(filename)-intStart))>0 Then 
  163.             IsAllowed = True 
  164.         End If 
  165.           End IF  
  166.          End If 
  167.      End If 
  168.     End Function 
  169.      
  170.     '*****************************************  
  171.        ' 目的:    统计文件个数  
  172.        ' 输入:    无  
  173.        ' 返回:    返回上传的文件个数  
  174.     ' 说明:    intFileCount是一个Class级变量,在本Class内有效  
  175.     '          在函数PickData过程中,统计文件个数  
  176.        '*****************************************       
  177.        Function FileCount()  
  178.         FileCount = intFileCount  
  179.        End Function 
  180.  
  181.     '*****************************************  
  182.        ' 目的:    将二进制数据写入文件  
  183.        ' 输入:    FileName:  文件名  
  184.        ' 返回:    保存成功返回TRUE,失败则返回错误信息  
  185.        '*****************************************       
  186.        Function SaveFile(filename)  
  187.         Dim i,iFileCount  
  188.            Dim objSaveFile  
  189.      Dim sFileName,sNewpath,binFileCount  
  190.      Dim aryFileName,aryNewName,aryFileInfo  
  191.         SaveFile = True 
  192.            Set objSaveFile = Server.CreateObject("Adodb.Stream")   
  193.            objSaveFile.Mode=3 '3表示adModeReadWrite  
  194.            objSaveFile.Type=1 '1表示adTypeBinary  
  195.            objSaveFile.Open()  
  196.         'On Error Resume Next  
  197.        
  198.      If Trim(filename) = "" Then filename = strFileName  
  199.      If Instr(filename,",")>0 Then 
  200.          '多文件  
  201.          aryFileName = Split(strFileName,",")  
  202.       aryNewname = Split(filename,",")  
  203.                For i =LBound(aryNewName) To UBound(aryNewName)  
  204.              sFileName = aryFileName(i)  
  205.        If IsAllowed(sFileName) Then  '是否为允许的文件格式  
  206.            objSaveFile.Position = 0  
  207.            aryFileInfo = Split(objFiles.Item(sFileName),",")  
  208.            'objSaveFile.Write objFiles.Item(sFileName)  
  209.            objData.Position = aryFileInfo(0) + 2  
  210.            objData.CopyTo objSaveFile,aryFileInfo(1)  
  211.            sNewPath = Server.Mappath(strfilepath&sFileName)  
  212. '          strFileInfo = strFileInfo & FileName & "<Br>"  
  213.                strErrorInfo = strErrorInfo & "  
  214. 文件 <Font Color=""#FF0000"">" & sFileName & "</Font>上传成功"  
  215.            '存成文件,2表示adSaveCreateOverWrite  
  216.                        objSaveFile.SaveToFile sNewPath,2  
  217.        Else 
  218.            strErrorInfo = strErrorInfo & "  
  219. 文件 <font color=""#ff00000"">" & sFileName & "</font> 为不被允许上传的文件,请检查文件后缀  
  220. "  
  221.         SaveFile = False 
  222.         'Exit Function  
  223.        End If 
  224.       Next 
  225.      Else 
  226.          '单文件  
  227.       If IsAllowed(strFileName) Then  '是否为允许的文件格式  
  228.           aryFileInfo = Split(objFiles.Item(strFileName),",")  
  229.           objData.Position = aryFileInfo(0) + 2  
  230.           objData.CopyTo objSaveFile,aryFileInfo(1)  
  231.           sNewPath =  Server.Mappath(strFilePath&FileName)  
  232. '          strFileInfo = strFileInfo & FileName & "<Br>"  
  233.            strErrorInfo = strErrorInfo & "  
  234. 文件 <Font Color=""#FF0000"">" & FileName & "</Font>"  
  235.                    objSaveFile.SaveToFile sNewPath,2  
  236.          Else 
  237.           strErrorInfo = strErrorInfo & "  
  238. 文件 <Font Color=""#FF0000"">" & sFileName & "</font> 为不被允许上传的文件,请检查文件后缀!"  
  239.        SaveFile = False 
  240.        'Exit Function  
  241.       End If 
  242.      End If 
  243.        
  244.      objSaveFile.Close  
  245.            Set objSaveFile = Nothing 
  246.      objData.Close  
  247.      Set objData = Nothing 
  248.      Set objFiles = Nothing 
  249.      'If err.Number <> 0 Then SaveFile = False  
  250.        End Function 
  251.  
  252.        '*****************************************  
  253.        ' 目的:    获取表单项的值  
  254.        ' 输入:    name:  为要寻找的字段变量  
  255.        '          txtdata:   为已从图象中分离出来的的所有文本  
  256.        ' 返回:    表单项的值  
  257.        '*****************************************  
  258.        Function FindInput(fName,txtdata)  
  259.            Dim intStartPos,intEndPos,intNameLen,intValEnd,i,bReturn  
  260.            intStartPos = 1  
  261.            intNameLen = LenB(StrToBin("name=""" & fName & ":"))  
  262.            intStartPos = InstrB(intStartPos,txtdata,fName,1) + intNameLen  
  263.         If intStartPos > intNameLen Then 
  264.             intEndPos = InstrB(intStartPos-3,txtdata,StrToBin(""""))  
  265.          bReturn = bReturn & MidB(txtdata,intStartPos,intEndPos-intStartPos)  
  266.          intValEnd = intEndPos  
  267.                '表单中可能有多个同名变量(用在有主表与明细表中的数据更新中)  
  268.          Do   
  269.              intStartPos = Instr(intValEnd,txtdata,fName) + intNameLen  
  270.              If intStartPos > intNameLen Then 
  271.               intValEnd = Instr(intStartPos,txtdata,"""")  
  272.              bReturn = bReturn & "," & Mid(intStartPos,txtdata,intEndPos-intStartPos)  
  273.           End If 
  274.          Loop While (intStartPos > intNameLen)  
  275.            End If 
  276.      FindInput = bReturn  
  277.        End Function 
  278.  
  279.     '*****************************************  
  280.        ' 目的:    检测文件是否存在  
  281.        ' 输入:    filename:  文件名        
  282.        ' 返回:    文件存在返回False,文件不存在返回True  
  283.        '*****************************************  
  284.        Function FileExist(filename)  
  285.            Dim objFSO,objFile  
  286.      Dim sPath,sError  
  287.      Dim i  
  288.  
  289.      FileExist = False 
  290.        If Trim(filename) = "" Then 
  291.          strErrorInfo = strErrorInfo  & "<Br>文件名不能为空!" 
  292.          Exit Function 
  293.      End If 
  294.      Set objFSO = Server.CreateObject("Scripting.FileSystemObject")  
  295.              
  296.      If Instr(filename,",")>0 Then 
  297. 'Response.Write("  
  298. @" & filename & "@  
  299. ")  
  300.          aryFileName = Split(filename,",")  
  301.       For i = LBound(aryFileName) To UBound(aryFileName)  
  302. 'Response.Write("  
  303. file:" & strFilePath &"#" &  aryFileName(i) & " 
  304. ")  
  305.           sPath = Server.Mappath(strFilePath & aryFileName(i))  
  306.           If objFSO.FileExists(sPath) Then 
  307.            sError = sError & "  
  308. 文件 " & aryFileName(i) & " 已经存在!"  
  309.        End If 
  310.       Next 
  311.      Else 
  312.             sPath = Server.Mappath(strFilePath & filename)  
  313.             If objFSO.FileExists(sPath) Then 
  314.           sError = sError & "  
  315. 文件 " & filename & " 已经存在!"  
  316.             End If 
  317.      End If 
  318.         Set objFSO = Nothing 
  319.      If Trim(sError) <> "" Then 
  320.          strErrorInfo = strErrorInfo & sError  
  321.      Else 
  322.       FileExist = True 
  323.      End If 
  324.        End Function 
  325.    
  326.        '*****************************************  
  327.        ' 目的:    获取表单项的值  
  328.        ' 输入:    name:  为要寻找的字段变量  
  329.        ' 返回:    转成普通字符串后的表单项的值  
  330.        '*****************************************  
  331.        Function FormName(aName)  
  332.            Dim binFormName,binTest  
  333.      'binTxtData已经分离出来的文件数据  
  334.            binFormName = FindInput(aName,binTxtData)  
  335.         FormName = BinToStr(binFormName)  
  336.        End Function 
  337.  
  338.        '*****************************************  
  339.        ' 目的:    设置文件存放路径  
  340.        ' 输入:    str:  文件存放相对路径           
  341.        ' 说明:    将输入的str赋给Class级变量FilePath,记录文件相对路径     
  342.        '*****************************************  
  343.        Sub SetPath(str)  
  344.         strFilePath = str & "\" 
  345.        End Sub 
  346.  
  347.     '*****************************************  
  348.        ' 目的:    获取文件存放相对路径  
  349.        ' 输入:    无           
  350.        ' 返回:    返回文件存放相对路径     
  351.        '*****************************************  
  352.        Function GetPath()  
  353.         GetPath = strFilePath  
  354.     End Function 
  355.  
  356.     '*****************************************  
  357.        ' 目的:    获取错误信息  
  358.        ' 输入:    无  
  359.        ' 返回:    返回错误信息  
  360.        '*****************************************  
  361.        Function ErrorInfo()  
  362.         ErrorInfo = strErrorInfo  
  363.        End Function 
  364.  
  365.      '*****************************************  
  366.        ' 目的:    获取文件名或文件名列表  
  367.        ' 返回:    文件名或文件名列表  
  368.        '*****************************************  
  369.        Function FileName()  
  370.         FileName = strFileName  
  371.        End Function 
  372.   End Class 
  373. %> 

inc_set.asp的源码:

  1. <%  
  2.    Private Const HTMLTitle = "WEB内容管理系统" 
  3.    'TOP。htm中行的颜色  
  4.    Private Const ClrTopTR = "#D1A798" 
  5.  
  6.    '表格的颜色  
  7.    Private Const clrLeftTD = "#B57560" 
  8.    Private Const clrRightTD = "#A6624A" 
  9.    Private Const clrTitleTR = "#C18B79" 
  10.    Private Const clrGeneralTR = "#CEA293" 
  11.    Private Const clrBottmTR = "#C18B79" 
  12. %> 


四、商业应用中的问题

  优点:1.支持多种发送邮件组件;
      2.支持发送多附件。

  缺点:1.对附件大小没有限制;
      2.如果附件已经存在于服务器上,无法再上传;
      3.对填写的表单信息是否为空,没进行判断;

五、注意事项

  本程序主要目的是学习,不适合用于商业,因为在使用中还有问题存在,当然你可以对其进行完善再应用到商业上。大家,在使用过程中,如发现问题,可以到论坛问http://www.blueidea.com/bbs,也可以发email给我cjj8110@hotmail.com(也是我的MSN地址)。最后,感谢各位兄弟帮忙测试。Jmail部分代码已测试通过,用CDO发附件,及其它发信组件还没有测试,由于条件有限,只能到此为止了。

  还有一点,在存入程序文件的目录下,需要建一文件夹attachmentfiles(用于存放附件),此文件夹是必须的。

此文章由 flyinweb 于 2010-11-24 17:40:38 编辑

本日志由 flyinweb 于 2009-06-19 13:56:58 发表,目前已经被浏览 4170 次,评论 0 次;

作者添加了以下标签: asp发邮件

引用通告:http://www.517sou.net/Article/40/Trackback.ashx

评论订阅:http://www.517sou.net/Article/40/Feeds.ashx

评论列表

    暂时没有评论
(必填)
(必填,不会被公开)