主题:  还差那么一点点,快成功了……

楚楚

职务:普通成员
等级:1
金币:1.0
发贴:187
#12003/10/25 8:51:21
高手,请帮我一把。
这个“找回密码”的程序,已经困扰我很长时间了。

下面这段红色代码,发信是没问题的,测试一切顺利。


<% '======================================================================================
Dim ForUser, FromUser, ForUserEmail, FromUserEmail, SmtpServer
Dim emailTit, emailTxt, FromUserID, FromUserIDPW
emailTit = Request.Form("emailTit") '从表单获取email的标题
emailTxt = Request.Form("emailTxt") '从表单获取邮件的内容
emailTxt = emailTxt & "


久久家园
"

'==========================以下代码是判断服务器是否支持JMAIL组件
Function IsObjInstalled(strClassString)
On Error Resume Next
IsObjInstalled = False
Err = 0
Dim xTestObj
Set xTestObj = Server.CreateObject(strClassString)
If 0 = Err Then IsObjInstalled = True
Set xTestObj = Nothing
Err = 0
End Function
if not IsObjInstalled("JMail.Message") then
Response.write"你所使用的服务器不支持邮件发送!"
Response.End
end if
'==========================================================
if Trim(Request.Form("action")) = "确定发送" then
SmtpServer = "mail.123.net"
FromUserEmail = "123@123.net"
FromUser = "我的网站"
ForUserEmail = Request.Form("ForUserEmail")
Dim JMail
Set JMail=Server.CreateObject("JMail.Message")
JMail.Logging=True
JMail.Charset="gb2312"
JMail.ContentType = "text/html"
JMail.AddHeader "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
'if Request.Form("smtpPW") = "1" then '判断服务器是否需要身份验证
JMail.MailServerUserName = "123r@123.net"
JMail.MailServerPassword = "123456"
'end if
JMail.From = FromUserEmail '发件人的信箱
JMail.FromName = FromUser '发件人的名字
JMail.Subject = emailTit '邮件的主题
JMail.Body = emailTxt '邮件的内容
'==============================收件人的地址!
JMail.AddRecipient(ForUserEmail) '收件人的地址
JMail.Priority=5 '邮件级别1-5数字越大级别越高---3为普通邮件
JMail.AppendBodyFromFile(Server.MapPath("Mailend.txt"))
JMail.Send(smtpServer)
JMail.Close
Set JMail=nothing
if err then
err.clear
Response.Write "
发信功能已经打开,但因服务器不支持发信或者信箱地址错误,导致信件无法发出!
"
Response.End
else
Response.Write "
信件已经发出!
"
Response.End
end if
end if %>


现在的主要问题是,怎样让Jmali提取数据库的用户名、信箱,然后发送。
下面这段蓝色代码,是原始的发送程序代码,他的程序应该没问题,但可能由于JMail.SMTPMail不支持服务器验证,无法发送邮件。
我设想:可不可以用上面的能够正常发信的红色代码,来替换这段蓝色代码。
哪位热心的高手帮我解决一下,感激不尽呀。

解决了这个问题,应该是造福人类了。
我想很多朋友一定都有我这样的Jmail困惑。
要知道,找回密码的功能,是相当重要的。而,要真正实现,好难啊。

<%
function SendMail(mailto,subject,msg)
dim JMail
'on error resume next
Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.LazySend         = true
JMail.silent         = true
JMail.Charset         = "gb2312"
JMail.ContentType     = "text/plain"
JMail.Sender         = "bluepointnet@msn.com"
JMail.ReplyTo         = "bluepointnet@msn.com"
JMail.SenderName     = "零点娱乐交友俱乐部"
JMail.Subject         = subject
JMail.SimpleLayout     = true
JMail.Body         = msg
JMail.Priority         = 1
JMail.AppendBodyFromFile(Server.MapPath("Inc/Mailend.txt"))
JMail.AddRecipient mailto
JMail.AddHeader "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
SendMail = JMail.Execute()
JMail.Close
set JMail=nothing
call RecordLog(mailto,subject,msg)
end function

function NeedMail(MType,ToID,subject,msg)
dim Rs,sql,Rss
set Rs=server.createobject("adodb.recordset")
sql="select email from user_reg where user_id=" & ToID
Rs.open sql,conn,1,1
If Not Rs.Eof Then
    set Rss=server.createobject("adodb.recordset")
    sql="select * from user_option where user_id=" & Cint(ToID)
    Rss.open sql,conn,1,1
    If Not Rss.Eof Then
        TType=Rss(MType)
    Else
        TType=True
    End If
    Rss.Close
    set Rss=Nothing
    If TType=True Then
        If Rs("email")<>"" Then
            call SendMail(Rs("email"),subject,msg)
        End If
    End If
End If
Rs.Close
end function

function RecordLog(mailto,subject,msg)
Dim LogFileName,FileObject,Out
LogFileName=Server.MapPath("mdb/maillog.txt")
Set FileObject=Server.CreateObject("SCRIPTING.FILESYSTEMOBJECT")
Set Out=FileObject.OpenTextFile(LogFileName,8,True)
Out.WriteLine("Time : " & Now())
Out.WriteLine("MailTo : " & mailto)
Out.WriteLine("Subject : " & subject)
Out.WriteLine("Contents : ")
Out.WriteLine(msg)
Out.WriteLine("----------")
Out.WriteLine()
Out.Close
end function
%>


下面是找回密码的最后一步的代码,包含文件jmail要在这一步发送。




<%
dim conn,DBPath
dim rs_lar
dim sql
dim user_name,answer

'叛断Session变量是否超时
if isempty(session("u_id")) then
'response.redirect "timeout.asp"
end if

if session("u_id")<>1 then
response.redirect "havereg.asp"
end if

user_name =left(request("user_name"),10)
answer=request("answer")

'-----------------------------------------------------------------
Set conn = Server.CreateObject("ADODB.Connection")
DBPath = Server.MapPath("date.mdb")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
'-----------------------------------------------------------------
Set rs_lar = Server.CreateObject("ADODB.Recordset")
sql="select * from user_reg where user_name like '" & user_name & "'and answer like '" & answer & "'"
rs_lar.open sql,conn,3,2

%>













找回忘记的密码





<%if rs_lar.eof and rs_lar.eof then%>

对不起!您的回答不对,不能得到密码!请你好好想想吧

<%else
     MailContents=rs_lar("user_name") & ",您好!" & chr(13) & chr(13) & "恭喜你成功找回了登陆密码,以下是您的注册信息:" & chr(13) & chr(13) & "用户名:" & rs_lar("user_name") & chr(13) & "密码:" & Decode(rs_lar("password")) & chr(13) & "忘记密码时回答问题:" & rs_lar("question") & chr(13) & "答案:" & rs_lar("answer") & chr(13) & chr(13) & "这回可要记牢了呀!"
call SendMail(rs_lar("email"),"恭喜您成功找回了密码",MailContents)
%>
<%=rs_lar("user_name")%>,恭喜你,你的密码找到了!
已经发到您的注册信箱中了,请查收您的邮箱。




现在登陆   返回首页

<%
end if
%>
 




<%
rs_lar.close
set conn=nothing
set rs_lar=nothing
%>



null

职务:普通成员
等级:1
金币:0.0
发贴:15
#22003/10/25 9:31:05
楚楚在上个帖子中说
引用:
高手,请帮我一把。

现在的主要问题是,怎样让Jmali提取数据库的用户名、信箱,然后发送。


什么叫 用jmail 提取数据库的用户名?
红色的发信部分不要动,改成一个function,然后在发信的时候,用name查询到信箱和密码,作为参数,调用sendmail啊……



楚楚

职务:普通成员
等级:1
金币:1.0
发贴:187
#32003/10/25 10:16:25
null在上个帖子中说
引用:
什么叫 用jmail 提取数据库的用户名?
红色的发信部分不要动,改成一个function,然后在发信的时候,用name查询到信箱和密码,作为参数,调用sendmail啊……


您这一句,要怎么做呀?
改成一个function,怎么改呀?
帮我一下好吗?谢谢。
实在急急急急……



楚楚

职务:普通成员
等级:1
金币:1.0
发贴:187
#42003/10/25 11:38:58
我已经做好。
谢谢帮助。