ASP+XML发送邮件附件总不正常为什么?
有这样一个问题:
别人给过我一段ASP开发的EXCHANGE邮件的代码,开始还运行成功过,但是后来只能发送邮件的正文,发送附件时总是失败,发送过程没有任何错误提示. 错误的特征是发送的附件是固定大小的HTML文件(4k左右),无论我发送什么格式的附件(.doc, .exe, .zip, .jpg etc.),收件人收到文件名是正确的,但是实际上收到的就是这个固定格式的HTML文件.我不清楚这是什么原因造成的? 不知道这个错误与服务器设置是否有关?但是在当前设置下我用OUTLOOK, FOXMAIL等软件收发邮件均没有任何问题.
我的服务器是win2k adv server (english), 但是默认字符集已经设置为中文. 邮件系统是exchange 2000 server.
该代码中,使用了一个免费的上传组件chinaasp, 并使用了xml技术(msxml3 parser).
全部代码太长仅把关键的几部分代码贴在此:
set FileUp=server.CreateObject ("ChinaASP.UpLoad")
dim m_szSendType
dim m_szMsgUrl
m_szSendType=Request.QueryString("szSendType")
m_szMsgUrl=Request.QueryString("szMsgUrl")
if m_szSendType="" then m_szSendType="New"
dim m_szTo
dim m_szCc
dim m_szBcc
dim m_szSubject
dim m_szMailBody
dim m_nImportant
dim m_szOldAttachs '如果是转发的邮件,这里面存放有chr(1)分割的附件URL列表
m_nImportant=FileUp.Form("radioImportant").value
m_szTo=FileUp.Form("txtTo").value
m_szCc=FileUp.Form("txtCc").value
m_szBcc=FileUp.Form("txtBcc").value
m_szSubject=FileUp.Form("txtSubject").value
m_szMailBody=FileUp.Form("txtMailBody").value
m_szOldAttachs=FileUp.Form("txtAttachs").value
dim m_szSaveResult
dim m_szMsgId
'暂存要发送的邮件
m_szSaveResult=SaveMsg(g_szDrafts,"", "","" ,"IPM.Note", m_nImportant,m_szSubject,m_szMailBody)
Response.Write m_szSaveResult
m_szMsgUrl =GetItemHref(m_szSaveResult,"<span id=""itemHREF"">","</span>")
m_szMsgId =GetItemHref(m_szSaveResult,"<span id=""MsgID"">","</span>")
'下面处理有转发附件的情况
if m_szOldAttachs<>"" then call SaveFwAtts(m_szOldAttachs,m_szMsgUrl)
'下面处理用户新添加的附件
call SaveSendAtts(m_szMsgUrl,FileUp.Files)
select case m_szSendType
case "New":
call SendMail("send",m_szMsgId,g_szDrafts,m_szMsgUrl, m_szTo,m_szCc,m_szBcc,"IPM.Note",m_nImportant,m_szSubject,m_szMailBody)
case "Forward"
call SendMail("forward",m_szMsgId,g_szDrafts,m_szMsgUrl, m_szTo,m_szCc,m_szBcc,"IPM.Note",m_nImportant,m_szSubject,m_szMailBody)
case else
call SendMail("reply",m_szMsgId,g_szDrafts,m_szMsgUrl, m_szTo,m_szCc,m_szBcc,"IPM.Note",m_nImportant,m_szSubject,m_szMailBody)
end select
===================
dim szXml
dim szRfc822
dim oXmlSercerHttp
set oXmlSercerHttp =Server.CreateObject("MicroSoft.XMLHttp")
dim szPostUrl
if m_szMsgUrl="" then
szPostUrl=szDrafts
else
szPostUrl=szMailUrl
end if
szXml=""
if szCmdType<>"send" then
szXml= "SrcMsg=" & szMailUrl & chr(10)
szXml=szXml & "CmdReferring=" & szCmdType & chr(10)
end if
szXml=szXml & "Cmd=send" & chr(10)
szXml=szXml & "MsgTo=" & szTo & chr(10)
szXml=szXml & "MsgCc=" & szCc & chr(10)
szXml=szXml & "MsgBcc=" & szBcc & chr(10)
szXml=szXml & "MsgID=" & szMsgId & chr(10)
szXml=szXml & "MsgClass="& szMsgClass & chr(10)
szXml=szXml & "urn:schemas:httpmail:importance=" & nImportant & chr(10)
szXml=szXml & "http://schemas.microsoft.com/exchange/sensitivity-long=" & chr(10)
szXml=szXml & "urn:schemas:httpmail:subject=" & szSubject & chr(10)
szRfc822= chr(13) & chr(10) & "From:" & g_szUserName & "@" & Application("MailAddr") & chr(13) & chr(10)
szRfc822=szRfc822 & "To:" & szTo & chr(13) & chr(10)
szRfc822=szRfc822 & "Cc:" & szCc & chr(13) & chr(10)
szRfc822=szRfc822 & "Bcc:" & szBcc & chr(13) & chr(10)
szRfc822=szRfc822 & "Importance:" & nImportant & chr(13) & chr(10)
szRfc822=szRfc822 & "subject:" & szSubject
szXml=szXml & "urn:schemas:httpmail:textdescription=" & szDocHtml
call oXmlSercerHttp.open("POST", szPostUrl,false,g_szDomainName & "\" & g_szUserName,g_szUserPwd)
call oXmlSercerHttp.setRequestHeader("Accept-Language:","zh-cn")
'call oXmlSercerHttp.setRequestHeader("Accept-Language:","GB2312")
'call oXmlSercerHttp.setRequestHeader("Content-type:", "application/x-www-UTF8-encoded")
call oXmlSercerHttp.setRequestHeader("Content-type:", "application/x-www-UTF8-encoded")
'call oXmlSercerHttp.setRequestHeader("Content-type:", "application/x-www-form-urlencoded")
call oXmlSercerHttp.send(szXml)
if oXmlSercerHttp.responsetext="" then
'模拟Smtp Event Sink
MailReminderEvent(szRfc822)
Response.Redirect "NewOK.HTM"
'response.write "邮件发送成功。返回邮件首页。"
else
'删除临时Mail Msg
if szMsgId <> "" then DelMsg(szMailUrl)
Response.Redirect "Fail.HTM"
end if
set oXmlSercerHttp=nothing
end sub
'发送邮件时对收件人地址进行解析,避免邮件发不出去
===============================
'添加附件用:将名为szFileName的文件,源url为szSrcFile,添加成szMSgAUrl的附件
function SaveAttach(szMsgUrl,szFileName,szSrcFile)
set oXmlSercerHttpFile =Server.CreateObject("MSXML2.SERVERXMLHttp")
call oXmlSercerHttpFile.open("GET", szSrcFile,false,g_szDomainName & "\" & g_szUserName,g_szUserPwd)
call oXmlSercerHttpFile.setRequestHeader("Translate:","f")
call oXmlSercerHttpFile.send()
set oXmlSercerHttp =Server.CreateObject("MSXML2.SERVERXMLHttp")
call oXmlSercerHttp.open("PUT", szMsgUrl & "/" & toUTF8(szFileName),false,g_szDomainName & "\" & g_szUserName,g_szUserPwd)
'call oXmlSercerHttp.setRequestHeader("Content-type:",szContentType)
call oXmlSercerHttp.setRequestHeader("Translate:","f")
Call oXmlSercerHttp.send(oXmlSercerHttpFile.responseBody)
alert "file=" & oXmlSercerHttpFile.responseBody
'Set fs1 = Server.CreateObject("Scripting.FileSystemObject")
'fs1.create("d:\01.txt")
'Set fs1=nothing
'call oXmlSercerHttp.send(oXmlSercerHttpFile.responseStream)
set oXmlSercerHttpFile=nothing
set oXmlSercerHttp=nothing
end function
'临时Save邮件,用于添加附件
function SaveMsg(szDestFolder,szTo,szCc,szBcc,szMsgClass,nImportant,szSubject,szMailBody)
dim szXml
dim oXmlSercerHttp
set oXmlSercerHttp =Server.CreateObject("MicroSoft.XMLHttp")
szXml="Cmd=save" & chr(10)
szXml=szXml & "MsgTo=" & chr(10)
szXml=szXml & "MsgCc=" & chr(10)
szXml=szXml & "MsgBcc=" & chr(10)
szXml=szXml & "MsgID=" & chr(10)
szXml=szXml & "MsgClass="& szMsgClass & chr(10)
szXml=szXml & "urn:schemas:httpmail:importance=" & nImportant & chr(10)
szXml=szXml & "http://schemas.microsoft.com/exchange/sensitivity-long=" & chr(10)
szXml=szXml & "urn:schemas:httpmail:subject=" & szSubject & chr(10)
szXml=szXml & "urn:schemas:httpmail:textdescription=" & szMailBody
call oXmlSercerHttp.open("POST", szDestFolder,false,g_szDomainName & "\" & g_szUserName,g_szUserPwd)
Call oXmlSercerHttp.setRequestHeader("Accept-Language:","zh-cn")
'Call oXmlSercerHttp.setRequestHeader("Accept-Language:","GB2312")
Call oXmlSercerHttp.setRequestHeader("Content-type:", "application/x-www-UTF8-encoded")
'Call oXmlSercerHttp.setRequestHeader("Content-type:", "application/x-www-form-urlencoded")
call oXmlSercerHttp.send(szXml)
SaveMsg=oXmlSercerHttp.responsetext
set oXmlSercerHttp=nothing
end function