首页 电脑学院 黑客教程 网站技术 网页特效 免费论文 公文写作 演讲发言 实用文档 职场指南 时尚生活 情感男女 其他资讯

您的位置:首页-> 网站技术-> ASP技术-> 使用asp实现支持附件的邮件系统
使用asp实现支持附件的邮件系统
大家经常探讨使用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技术

ASP技术
PHP技术
JSP技术
.NET技术
服务器技术
数据库开发
其它类

本类阅读TOP10

·MDAC2.8 下载!
·ASP 编程中 20 个非常有用的例子——适合初学者
·ASP编程入门进阶(七):内置对象Server
·跟我学做树型菜单(四)
·教你1小时里搞定ASP
·IIS6.0的设置
·ASP分页祥解
·常用代码集锦(ASP)
·关于内部服务器500错误的文档
·新手初练:用ASP做一个域名查询系统

广告


关于本站|服务条款|广告服务|客服中心|发布文章|网站留言