使用记录集数据发送电子邮件

时间:2009-10-06 11:21:01

标签: sql email asp-classic

我有一个经典的ASP页面列出了数据库中的一些属性,并且每个属性都有一个小的联系表单 - 使用户能够从与该属性关联的属性代理“请求回调”。

但是,无论我填写哪种表格 - 向代理发送的电子邮件始终包含页面上第一个属性的详细信息,而不是该人请求回调的属性。

这是我在列表页面上的代码(以及联系表单);

<%
Dim rspropertyresults
Dim rspropertyresults_numRows

Set rspropertyresults = Server.CreateObject("ADODB.Recordset")
rspropertyresults.ActiveConnection = MM_dbconn_STRING

rspropertyresults.Source = "SELECT * FROM VWTenantPropertiesResults ORDER BY ContentID DESC"

rspropertyresults.CursorType = 0
rspropertyresults.CursorLocation = 2
rspropertyresults.LockType = 1
rspropertyresults.Open()

rspropertyresults_numRows = 0
%>

<% 
sys_message = ""

If (Request.Form("form_submit") <> "") Then
    Response.Write("<h1>Form Submitted</h1>") 
    %><!--#include file="docallback.asp"--><%
End If %>

<body id="propertyresults">
<% If Not rspropertyresults.EOF Or Not rspropertyresults.BOF Then %>
<% 
While ((RepeatProperties__numRows <> 0) AND (NOT rspropertyresults.EOF)) 
%>
<div class="propertydetails">
<ul>
<li class="price"><% If (rspropertyresults("ContentPrice")) <> "" Then %><%= FormatCurrency((rspropertyresults.Fields.Item("ContentPrice").Value), 2, -2, -2, -2) %> PCM<% End If ' price true %></li>
<li class="address"><%=varFullAddress%></li>
<% If (rspropertyresults.Fields.Item("ContentDetails").Value) <> "" AND (rspropertyresults.Fields.Item("ContentDetails").Value) <> "<p><br /></p>" Then %><li><%=StripHTML(rspropertyresults.Fields.Item("ContentDetails").Value)%></li><% End If ' details true %>
</ul>
</div>

<div class="propertyimage">
    <a class="badge-callback" id="badge-callback<%=(rspropertyresults.Fields.Item("ContentID").Value)%>" title="Request Callback"  href="#">Request Callback</a>

    <div id="panel<%=(rspropertyresults.Fields.Item("ContentID").Value)%>">
        <form action="default.asp" name="frmCallback" id="form_callback" method="post">
            <fieldset>
                <legend><h2>Request a callback</h2></legend>
                <dl>
                    <dt><label id="name">Name</label></dt>
                    <dd><input id="form_input" type="text" name="txtName" /></dd>
                    <dt><label id="email_address">Email</label></dt>
                    <dd><input id="form_input" type="text" name="txtEmail" /></dd>
                    <dt><label id="telephone">Telephone</label></dt>
                    <dd><input id="form_input" type="text" name="txtTelephone" /></dd>
                    <input type="hidden" name="form_submit" value="submitted" />
                    <dt><input type="submit" value="Request a callback"></dt>
                </dl>
            </fieldset>
        </form>
    </div>
</div>

<% 
  RepeatProperties__index=RepeatProperties__index+1
  RepeatProperties__numRows=RepeatProperties__numRows-1
  rspropertyresults.MoveNext()
Wend
%>

我还有一个处理电子邮件发送的docallback.asp页面;

<%
    fldName         = replace(request.Form("fldName"),"'","")
    fldTelephone    = replace(request.Form("fldTelephone"),"'","")
    fldEmail        = replace(request.Form("fldEmail"),"'","")

    mBody = "<html><style>body,p,td{font-family:arial;font-size:12px;}</style><body>"
    mBody = mBody & "<p>A tenant has requested a call back for further information regarding the following property:</p>"

    If (rspropertyresults.Fields.Item("ContentHouseNo").Value) <> "" Then
    varFullAddress = (rspropertyresults.Fields.Item("ContentHouseNo").Value) &  " "
    End If
    varFullAddress = varFullAddress & (rspropertyresults.Fields.Item("ContentStreet").Value)
    If (rspropertyresults.Fields.Item("ContentStreet2").Value) <> "" Then
    varFullAddress = varFullAddress & " " & (rspropertyresults.Fields.Item("ContentStreet2").Value)
    End If
    If (rspropertyresults.Fields.Item("ContentTown").Value) <> "" Then
    varFullAddress = varFullAddress & " " &  (rspropertyresults.Fields.Item("ContentTown").Value)
    End If
    If (rspropertyresults.Fields.Item("ContentArea").Value) <> "" Then
    varFullAddress = varFullAddress & " " &  (rspropertyresults.Fields.Item("ContentArea").Value)
    End If
    varFullAddress = varFullAddress & " " &  (rspropertyresults.Fields.Item("ContentPostCode").Value)

    mBody = mBody & "<p>" & varFullAddress & "</p>"

    mBody = mBody & "<p>Their details are:</p>"

    If request.Form("fldName") <> "" Then
        mBody = mBody & "<p>Name: " & request.Form("fldName") & "<br/>"
    End If

    If request.Form("fldTelephone") <> "" Then
        mBody = mBody & "Telephone: " & request.Form("fldTelephone") & "<br/>"
    End If

    If request.Form("fldEmail") <> "" Then
        mBody = mBody & "Email: " & request.Form("fldEmail") & "</p>"
    End If

    mBody = mBody & "<p>" & "<strong>" & "http://www."& varSiteDomain & "</strong>" & "</p>"
    mBody = mBody & "</body></html>"

    strMSSchema = "http://schemas.microsoft.com/cdo/configuration/"
    Set oCdoConfg = Server.CreateObject("CDO.Configuration")
    oCdoConfg.Fields.Item(strMSSchema & "sendusing") = 1 
    oCdoConfg.Fields.Item(strMSSchema & "smtpserver") = ""
    oCdoConfg.Fields.Item(strMSSchema & "sendusername") = ""
    oCdoConfg.Fields.Item(strMSSchema & "sendpassword") = ""
    oCdoConfg.Fields.Update     

    set oCdoMsg = server.createobject("CDO.Message")
    oCdoMsg.to = ""
    oCdoMsg.bcc = ""
    oCdoMsg.from = ""
    oCdoMsg.Subject = "A tenant has requested a callback about one of your properties"
    oCdoMsg.HTMLbody = mBody
    Set oCdoMsg.Configuration = oCdoConfg
    oCdoMsg.send
    set oCdoMsg = nothing
    set oCdoConfg = nothing 

    response.Redirect("default.asp")
%>

我想知道是否有人能够发现电子邮件未在电子邮件中发送特定房产详情的原因?

为相当冗长的代码道歉。

谢谢。

3 个答案:

答案 0 :(得分:1)

您似乎重复使用相同的结果集(rspropertyresults)来显示属性和发送电子邮件。

由于此记录集不接受ContentID作为参数(并且您无论如何都不发送),因此将使用记录集中第一条记录上的属性发送电子邮件。

在每个表单中添加一个隐藏的输入ContentID,在此命令上创建一个额外的记录集:

SELECT  *
FROM    VWTenantPropertiesResults
WHERE   ContentID = @ContentID

,打开它并使用它来检索属性的详细信息:

cmdEmail = Server.CreateObject("ADODB.Command")
rsEmail = Server.CreateObject("ADODB.Recordset")

With cmdEmail
    .ActiveConnection = MM_dbconn_STRING
    .CommandText = "SELECT * FROM VWTenantPropertiesResults WHERE ContentID = ?"
    .CommandType = 1
    .Parameters.Append .CreateParameter("@ContentID", 3, 1, , request.Form("ContentID"))
End With

rsEmail.Open cmdEmail

答案 1 :(得分:0)

我无法确定你从哪里得到“rspropertyresults”,似乎没有查询。您可能需要确保数据可能在初始页面上找到,存储并发送到doCallBack.asp页面(通过或类似的。

此外,您的输入框似乎在表单的两半上都没有相同的名称。也许有一些我缺少的东西,但我认为你想要使用像:

这样的东西
fldName             = replace(request.Form("txtName"),"'","")
fldTelephone    = replace(request.Form("txtTelephone"),"'","")
fldEmail            = replace(request.Form("txtEmail"),"'","")

答案 2 :(得分:0)

看起来你并没有将ContentID发布到表单中的docallback.asp页面,我猜你在docallback.asp页面上请求结果时也没有过滤它。这意味着您将始终获得第一个结果(而不是您想要的结果)。