|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
大家常常探讨使用asp,而不使用其他组建能否实现文件的上传,从而开发出支持邮件附件的邮件系统,答案是可以的。请看: 以下是发送邮件的页面,邮件的帐号是员工号,假设是5位的数字,sendmail.asp当然是在合法登陆后才能够看到的 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <link rel="stylesheet" type="text/css" href="/css/FORUM.CSS"> <style type=text/css> <!-- input { font-size: 9pt; color: #0011dd; background-color: #e9e9f9; padding-top: 0px} select { font-size: 9pt; color: #0011dd; background-color: #e9e9f9; padding-top: 0px} textarea { font-size: 9pt; color: #0011dd; background-color: #e9e9f9; padding-top: 0px} --> </style> <title>邮件系统</title></head> <body bgcolor="#FEF7ED"> <script language="javascript"> <% if session("myid")="" or len(session("myid"))<>5 then response.write "window.open(\\\'nolog.asp\\\',target=\\\'_top\\\');" end if %> function check(theform) { if (theform.geterempl.value==\\\'\\\') { alert(\\\'请输入收件人!\\\'); theform.geterempl.focus(); return false; } if (theform.emailtitle.value==\\\'\\\') { alert(\\\'请输入主题!\\\'); theform.emailtitle.focus(); return false; } if (theform.emailtitle.value.length>200) { alert(\\\'主题请少于200字节\\\'); theform.emailtitle.focus(); return false; } if (theform.body.value.length>15*1024) { alert(\\\'正文请少于16K\\\'); theform.body.focus(); return false; } if (theform.emailshowname.value.length>1024) { alert(\\\'签名请少于1K\\\'); theform.emailshowname.focus(); return false; } } </script> <% meth=request.querystring("meth") if meth=1 then geterempl=trim(request.querystring("geterempl")) emailtitle=trim(request.querystring("emailtitle")) elseif meth=2 then mailid=trim(request.querystring("mailid")) set conn=server.createobject("adodb.connection") conn.open "DSN=;UID=;PWD=" dsnpath="DSN=;UID=;PWD=" set rs=server.createobject("adodb.recordset") selectnew="select * from t_mail where ((geterempl like \\\'%"&session("myid")&"%\\\' or deleempl like \\\'%"&session("myid")&"%\\\' or receempl like \\\'%"&session("myid")&"%\\\')and (not deleverempl like \\\'%"&session("myid")&"%\\\')) and mailid=\\\'"&mailid&"\\\' " rs.open selectnew,dsnpath,3,3 if rs.bof or rs.eof then %> <script language="javascript"> alert("您没有查看这封邮件的权限!"); window.history.back(); </script> <% response.end else body=rs("body") emailtitle=rs("emailtitle") rs.close set rs=nothing conn.close set conn=nothing end if end if %> <Form name="upload_file" onSubmit="return check(this)" action="loadmail.asp" method=post enctype="multipart/form-data" > <table width="100%" border="0" cellspacing="2" cellpadding="2"> <tr> <td width="11%"> <div align="right">发件人:</div> </td> <td width="89%"> <input type="hidden" name="senderempl" value="<%=session("myid")%>"> <%=session("myid")%> </td> </tr> <tr> <td width="11%"> <div align="right">收件人:</div> </td> <td width="89%"> <input type="text" name="geterempl" size="40" value="<%=geterempl%>"> <input type="checkbox" name="emaillevel" value="1" style="background-color: #FEF7ED"> 紧急信件 </td> </tr> <tr> <td width="11%" valign="top"> </td> <td width="89%">发送多个人的时候可以使用"<font color="#9999FF">|</font>"隔开,例如:<font color="#3399FF">01234|01235|01236</font>,第一位和最后一位不需要"<font color="#9999FF">|</font>"<br> <font color="#FF0000">新功能</font>:您可以把信信直接发送给您设定的<a href="group.asp">某用户</a>,发送格式为:gr:组序号,例如<font color="#0099FF">gr:001</font></td> </tr> <tr> <td width="11%"> <div align="right"></div> </td> <td width="89%"> <input type="checkbox" name="receempl" value="1" style="background-color: #FEF7ED"> 保存一份到收藏夹[<font color="#3399FF">选定此项,则邮件发送到对方邮箱的同时发送到自己的收藏夹里</font>]</td> </tr> <tr> <td width="11%" valign="top"> </td> <td width="89%"> </td> </tr> <tr> <td width="11%" align="right"> 主题:</td> <td width="89%"> <input type="text" name="emailtitle" size="60" value="<%=emailtitle%>"> </td> </tr> <tr> <td width="11%" valign="top"> <div align="right">正文:</div> </td> <td width="89%"> <TEXTAREA name=body rows=8 cols=60><%=body%></TEXTAREA> </td> </tr> <tr> <td width="11%" valign="top"> <div align="right">签名:</div> </td> <td width="89%"> <textarea name="emailshowname" cols="30" rows="6"><%=application(session("myid")&"_name")%></textarea> </td> </tr> <tr> <td width="11%"> <div align="right"> <input type=hidden name="FileUploadStart"> 附件1: </div> </td> <td width="89%"> <input type="file" name="file_up" size="50"> </td> </tr> <tr> <td width="11%"> <div align="right">附件2:</div> </td> <td width="89%"> <input type="file" name="file_up1" size="50"> </td> </tr> <tr> <td width="11%"> <div align="right">附件3:</div> </td> <td width="89%"> <input type="file" name="file_up2" size="50"> <input type=hidden name="FileUploadEnd"> </td> </tr> <tr> <td width="11%"> <div align="right"></div> </td> <td width="89%"> <input type=submit value=确定 > </td> </tr> </table> </Form> </body> </html> 这次讲到的是处理发送的页面,前一部分是得到发送者ip地址和mac地址,并且禁止用户自己更改自己ip地址的代码,因为我们的系统是需要对个人修改ip的行为进行禁止的。 <% strIP = Request.ServerVariables("REMOTE_ADDR") Set net = Server.CreateObject("wscript.network") Set sh = Server.CreateObject("wscript.shell") sh.run "%comspec% /c nbtstat -A " & strIP & " > c:" & strIP & ".txt",0,true Set sh = nothing Set fso = createobject("scripting.filesystemobject") Set ts = fso.opentextfile("c:" & strIP & ".txt") macaddress = null Do While Not ts.AtEndOfStream data = ucase(trim(ts.readline)) If instr(data,"MAC ADDRESS") Then macaddress = trim(split(data,"=")(1)) Exit Do End If loop ts.close Set ts = nothing fso.deletefile "c:" & strIP & ".txt" Set fso = nothing GetMACAddress = macaddress strMac = GetMACAddress set conn=server.CreateObject("adodb.connection") conn.open "DSN=;UID=;PWD=" dsnpath="DSN=;UID=;PWD=" set rs=server.CreateObject("adodb.recordset") sele="select * from getmac where g_mac=\\\'"&strMac&"\\\'" rs.open sele,dsnpath if rs.bof then set conn=server.CreateObject("adodb.connection") conn.open "DSN=;UID=;PWD=" dsnpath="DSN=;UID=;PWD=" set rs=server.CreateObject("adodb.recordset") g_id=mid(strIP,9) g_id=left(g_id,2) \\\'response.write g_id if isnumeric(g_id) then g_id=cint(g_id) else g_id=0 end if sele="insert into getmac(g_ip,g_mac,g_id,g_ok) values(\\\'"&strIP&"\\\',\\\'"&strMac&"\\\',"&g_id&",0)" rs.open sele,dsnpath else set conn=server.CreateObject("adodb.connection") conn.open "DSN=;UID=;PWD=" dsnpath="DSN=;UID=;PWD=" set rs=server.CreateObject("adodb.recordset") sele="select * from getmac where g_ip=\\\'"&trim(strIP)&"\\\' and g_mac=\\\'"&trim(strMac)&"\\\'" rs.open sele,dsnpath if rs.bof or rs.eof then set rs1=server.CreateObject("adodb.recordset") sele="insert into badmac(ip, mac ,thetime) values(\\\'"&strIP&"\\\',\\\'"&strMac&"\\\',\\\'"&now()&"\\\')" rs1.open sele,dsnpath response.redirect("/reg/wrong.asp") response.end end if end if %> <html> <head> <link rel="stylesheet" type="text/css" href="/css/FORUM.CSS"> <style type=text/css> <!-- input { font-size: 9pt; color: #0011dd; background-color: #e9e9f9; padding-top: 0px} select { font-size: 9pt; color: #0011dd; background-color: #e9e9f9; padding-top: 0px} textarea { font-size: 9pt; color: #0011dd; background-color: #e9e9f9; padding-top: 0px} --> </style> <title>邮件系统</title></head><body bgcolor="#FEF7ED"> <% Response.Expires=0 Function bin2str(binstr) Dim varlen,clow,ccc,skipflag skipflag=0 ccc = "" If Not IsNull(binstr) Then varlen=LenB(binstr) For i=1 To varlen If skipflag=0 Then clow = MidB(binstr,i,1) If AscB(clow) > 127 Then ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow)) skipflag=1 Else ccc = ccc & Chr(AscB(clow)) End If Else skipflag=0 End If Next End If bin2str = ccc End Function varByteCount = Request.TotalBytes \\\'response.write varbytecount bnCRLF = chrB( 13 ) & chrB( 10 ) binHTTPHeader=Request.BinaryRead(varByteCount) \\\'response.write vbenter \\\'response.write "<br><br>"& cstr(binhttpheader) &"<br><br>" sread=0 eread=0 \\\'开始读非文件域的数据 set conn = Server.CreateObject("ADODB.Connection") conn.open "DSN=;UID=;PWD=" SQL="select * from t_mail where mailid=0" set rs=server.CreateObject("ADODB.Recordset") rs.Open sql,conn,3,3 rs.addnew rs("emaillevel")=0 rs("receempl")="" Do while lenB(binHTTPHeader)>46 Divider = LEFTb( binHTTPHeader, INSTRB( binHTTPHeader, bnCRLF ) - 1 ) binHeaderData = Leftb(binHTTPHeader, INSTRB( binHTTPHeader, bnCRLF & bnCRLF )-1) strHeaderData=bin2str(binHeaderData) lngFieldNameStart=Instr(strHeaderData,"name="&chr(34))+Len("name="&chr(34)) \\\'response.write "<br>lngfieldnamestart:"&lngfieldnamestart lngFieldNameEnd=Instr(lngFieldNameStart,strHeaderData,chr(34)) \\\'response.write "<br>lngfieldnameEND:"&lngfieldnameEND strFieldName=Mid(strHeaderData,lngFieldNameStart,lngFieldNameEnd-lngFieldNameStart) \\\'RESPOnSE.WRITE "<BR>STRFIELDNAME:" & STRfieldname strFieldName=Trim(strFieldName) strFieldName=Replace(strFieldName,vbcrlf,vbnullstring) \\\'判定文件数据时候开始 If strComp(strFieldName,"FileUploadStart",1)=0 and sread=0 Then \\\'response.write "找到了文件开始的地方" sread=1 \\\'response.write "<br>" & INSTRB( DataStart + 1, binHTTPHeader, divider ) &"<br>" binHTTPHeader=MIDB(binHTTPHeader,INSTRB( DataStart + 1, binHTTPHeader, divider )) exit do End if DataStart = INSTRB( binHTTPHeader, bnCRLF & bnCRLF ) + 4 DataEnd = INSTRB( DataStart + 1, binHTTPHeader, divider ) - DataStart binFieldValue=MIDB( binHTTPHeader, DataStart, DataEnd ) strFieldValue=bin2str(binFieldValue) \\\'strFieldValue=Trim(strFieldValue) strFieldValue=Replace(strFieldValue," "," ") \\\'非文件上传域变量赋值 \\\'execute strFieldName&"="""&strFieldValue&"""" \\\'response.write strFieldName&":"&strFieldValue&"<br>" if strfieldname="geterempl" then strFieldValue=Replace(strFieldValue,vbcrlf,vbnullstring) if instr(strfieldvalue,"gr:")=1 then \\\'邮件组发 \\\'response.write len(trim(strfieldvalue)) if len(trim(strfieldvalue))<>6 then \\\'格式错误返回 %> 尝试发送邮件,但是失败了,请修改错误后重试! <script language="javascript"> alert("您输入的收件组格式错误!r准确的格式是:\\\'gr:001\\\'"); history.back(); </script> <p> <% response.end else if not isnumeric(mid(trim(strfieldvalue),4)) then \\\'格式错误返回 %> 尝试发送邮件,但是失败了,请修改错误后重试! <script language="javascript"> alert("您输入的收件组格式错误!r准确的格式是:\\\'gr:001\\\'"); history.back(); </script> <p> <% response.end else thegroup=(mid(trim(strfieldvalue),4)) end if end if tmpSQL="select * from t_group where owner=\\\'"&session("myid")&"\\\' and groupidowner=\\\'"&thegroup&"\\\'" \\\'response.write tmpsql set tmprs=server.CreateObject("ADODB.Recordset") tmprs.Open tmpsql,conn if tmprs.bof or tmprs.eof then \\\'没有找到该组 %> 尝试发送邮件,但是失败了,请修改错误后重试! <script language="javascript"> alert("您输入的收件组<%=thegroup%>没有找到!"); history.back(); </script> <p> <% response.end else if tmprs("personnum")=0 then \\\'组内没有用户 %> 尝试发送邮件,但是失败了,请修改错误后重试! <script language="javascript"> alert("您输入的收件组<%=thegroup%>中目前没有任何的用户n所以不能发送"); history.back(); </script> <p> <% response.end else strFieldValue=trim(tmprs("groupempl")) tmprs.close set tmprs=nothing end if end if end if if instr(strfieldValue,"|") then \\\'组发 allsearch=replace(trim(strfieldValue),"|","\\\',\\\'") allsearch="\\\'"&allsearch&"\\\'" tmpstring=trim(strfieldValue)&"|" tosearch="" do while len(tmpstring)>=5 tosearch=left(tmpstring,5) tmpstring=mid(tmpstring,7) if instr(tosearch,"|") then \\\'格式错误 %> 尝试发送邮件,但是失败了,请修改错误后重试! <script language="javascript"> alert("您输入的收件人格式错误!"); history.back(); </script> <p> <% response.end end if tmpSQL="select * from (select userid from t_officer where userid in ("&allsearch&")) DERIVEDTBL where userid=\\\'"&tosearch&"\\\'" \\\'response.write tmpsql set tmprs=server.CreateObject("ADODB.Recordset") tmprs.Open tmpsql,conn if tmprs.eof or tmprs.bof then %> 尝试发送邮件,但是失败了,请修改错误后重试! <script language="javascript"> alert("您输入的收件人<%=tosearch%>没有找到!"); history.back(); </script> <p> <% response.end end if tmprs.close set tmprs=nothing loop strfieldValue=trim(strFieldValue) else if len(trim(strFieldValue))<>5 then \\\'格式不准确 %> 尝试发送邮件,但是失败了,请修改错误后重试! <script language="javascript"> alert("您输入的收件人<%=trim(strFieldValue)%>不准确!"); history.back(); </script> <p> <% response.end else if isnumeric(trim(len(strFieldValue))) then tmpSQL="select * from t_officer where userid=\\\'"&trim(strFieldValue)&"\\\'" set tmprs=server.CreateObject("ADODB.Recordset") tmprs.Open tmpsql,conn if tmprs.eof or tmprs.bof then %> 尝试发送邮件,但是失败了,请修改错误后重试! <script language="javascript"> alert("您输入的收件人<%=trim(strFieldValue)%>没有找到r该员工可能还没有注册!"); history.back(); </script> <p> <% response.end end if tmprs.close set tmprs=nothing strfieldValue=trim(strFieldValue) else %> 尝试发送邮件,但是失败了,请修改错误后重试! <script language="javascript"> alert("您输入的收件人<%=trim(strFieldValue)%>不准确!"); history.back(); </script> <p> <% response.end end if end if end if end if strFieldValue=replace(strFieldValue,"<","<") \\\'response.write strfieldname rs(STRFIELDNAME)=replace(strFieldValue,">",">") binHTTPHeader=MIDB(binHTTPHeader,INSTRB( DataStart + 1, binHTTPHeader, divider )) loop \\\'开始处理文件数据 titem=0 rs("filesize_1")=0 rs("filesize_2")=0 rs("filesize_3")=0 Do while lenB(binHTTPHeader)>46 if INSTRB( binHTTPHeader, bnCRLF & bnCRLF )<>0 then binHeaderData = LeftB(binHTTPHeader,INSTRB( binHTTPHeader, bnCRLF & bnCRLF )-1) else exit do end if strHeaderData=bin2str(binHeaderData) \\\'读取上传文件的Content-Type lngFileContentTypeStart=Instr(strHeaderData,"Content-Type:")+Len("Content-Type:") strFileContentType=Trim(Mid(strHeaderData,lngFileContentTypeStart)) strFileContentType=Replace(strFileContentType,vbCRLF,vbNullString) \\\'读取上传的文件名 if instr(strheaderdata,"filename=")>0 then lngFileNameStart=Instr(strHeaderData,"filename="&chr(34))+Len("filename="&chr(34)) lngFileNameEnd=Instr(lngFileNameStart,strHeaderData,chr(34)) strFileName=Mid(strHeaderData,lngFileNameStart,lngFileNameEnd-lngFileNameStart) strFileName=Trim(strFileName) strFileName=Replace(strFileName,vbCRLF,vbNullString) else strfilename="" end if \\\'读取上传文件数据 DataStart = INSTRB( binHTTPHeader, bnCRLF & bnCRLF ) + 4 DataEnd = INSTRB( DataStart + 1, binHTTPHeader, divider ) - DataStart If strFileName<>"" Then if dataend>0 then binFieldValue=MIDB( binHTTPHeader, DataStart, DataEnd ) \\\'将上传的文件写入数据库 titem=titem+1 \\\'response.write "titem:"&titem rs("FileContentType_"&titem)=strFileContentType rs("FileContent_"&titem).AppendChunk binFieldValue rs("filesize_"&titem)=lenb(binFieldValue) rs("filename_"&titem)=strfilename else binfieldvalue=binhttpheader end if End if if INSTRB( DataStart + 1, binHTTPHeader, divider )>0 then binHTTPHeader=MIDB(binHTTPHeader,INSTRB( DataStart + 1, binHTTPHeader, divider )) else binhttpheader="" end if loop rs("sizetotal")=csng(rs("filesize_1"))+csng(rs("filesize_2"))+csng(rs("filesize_3"))+csng(len(rs("body")))+csng(len(rs("emailtitle")))+csng(len(rs("emailshowname")))+csng(len("geterempl")) if csng(rs("sizetotal"))>=csng(2*1024*1024) then response.write "对不起,文件太大,请保证每封邮件的总大小不超过2M!" response.end end if rs("mailtime")=now rs("readerempl")="" if rs("receempl")<>"" then rs("receempl")=session("myid") rs("readerempl")=session("myid") end if rs("deleempl")="" rs("deleverempl")="" rs("sendmac")=strmac rs.update rs.close set rs=Nothing conn.Close set conn=Nothing %> <script language=javascript> window.open("mailok.asp",target="_self") </script> </body></html> 最后,我们来讲讲如何把内容从数据库中读出来,内容有这么几类,一类是浏览器上可以显示的,例如*.htm,一类是需要下载的,例如*.exe,还有一种是浏览器可以显示但是不能够让他显示的,例如*.asp,请看代码: <% Response.Buffer= true Response.Clear function getname(oriname) thename=oriname do while instr(thename,"/")>0 thename=mid(thename,instr(thename,"/")+1) loop do while instr(thename,"")>0 thename=mid(thename,instr(thename,"")+1) loop getname=thename end function function canexec(thechar) if instr(thechar,".asp")>0 then canexec=false exit function end if if instr(thechar,".asa")>0 then canexec=false exit function end if if instr(thechar,".aspx")>0 then canexec=false exit function end if if instr(thechar,".asax")>0 then canexec=false exit function end if canexec=true end function mailID=request("mailID") se=request("se") if se<>1 and se<>2 and se<>3 then response.end end if Set conn=server.createobject("adodb.connection") set rs=server.createobject("adodb.recordset") conn.open "DSN=;UID=;PWD=" sql="select * from t_mail where ((geterempl like \\\'%"&session("myid")&"%\\\' or deleempl like \\\'%"&session("myid")&"%\\\' or receempl like \\\'%"&session("myid")&"%\\\' ) and (not deleverempl like \\\'%"&session("myid")&"%\\\')) and mailid=\\\'"&mailid&"\\\' " rs.open sql,conn,3,3 if rs.eof or rs.bof then response.end end if if rs("filecontenttype_"&trim(se))<>"text/plain" or (not canexec(getname(trim(rs("filename_"&trim(se)))))) then Response.ContentType = rs("FileContentType_"&trim(se)) end if \\\'Response.AddHeader "content-type","application/x-msdownload" if instr(response.contenttype,"application")>0 then response.AddHeader "Content-Disposition","attachment;filename="&getname(trim(rs("filename_"&trim(se)))) end if Response.BinaryWrite rs("FileContent_"&trim(se)) rs.close set rs=Nothing conn.close set conn=nothing %> 返回类别: 教程 上一教程: ASP存储过程使用 下一教程: 在线用表单建立文件夹 您可以阅读与"使用ASP实现支持附件的邮件系统"相关的教程: · 用ASP实现支持附件的EMAIL系统 · 用ASP实现支持附件的EMAIL系统(1) · 用ASP实现支持附件的EMAIL系统(3) · 用ASP实现支持附件的EMAIL系统(2) · 使用XMLHTTP结合ASP实现网页的异步调用 |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |