将验证码集成到.NET电子邮件表单中

将验证码集成到.NET电子邮件表单中,.net,vb.net,email,captcha,.net,Vb.net,Email,Captcha,我无法将验证码集成到我正在使用的表单中。我几乎没有.NET的经验,所以任何帮助都将不胜感激!我终于找到了一个有效的联系方式(当使用我个人域名上的电子邮件地址时——由于某种原因,它似乎不能与gmail一起使用) 我设法让它的风格和功能,但它需要一个验证码来阻止垃圾邮件流入。我发现了一个预先制作的验证码表单,它本身就很好用,但我真的不知道如何将它与下面的表单集成。我可以让验证码自己工作,表单自己工作,但我似乎不知道如何让验证码验证和提交表单 现在,当我填写表格并提交时,我收到了一条绿色的确认信息,表

我无法将验证码集成到我正在使用的表单中。我几乎没有.NET的经验,所以任何帮助都将不胜感激!我终于找到了一个有效的联系方式(当使用我个人域名上的电子邮件地址时——由于某种原因,它似乎不能与gmail一起使用)

我设法让它的风格和功能,但它需要一个验证码来阻止垃圾邮件流入。我发现了一个预先制作的验证码表单,它本身就很好用,但我真的不知道如何将它与下面的表单集成。我可以让验证码自己工作,表单自己工作,但我似乎不知道如何让验证码验证和提交表单

现在,当我填写表格并提交时,我收到了一条绿色的确认信息,表示邮件已发送,但红色信息表示验证码失败。无论验证码字段中填写了什么,消息都会通过

坦率地说,我会很高兴与任何验证码,而不仅仅是我下载的。如果你们有更好的代码或方法将验证码合并到这个表单中,我很乐意使用它

下面是我在表单中使用的内容。请让我知道,如果我需要提供更多的细节。正如我所说的,任何帮助都将不胜感激

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="test.aspx.vb" Inherits="custom_aspnet_test" %>
<%@ Import Namespace="System.Web.Mail" %>
<script runat="server">   

   Sub btnSubmit_Click(sender as object, e as EventArgs)

        Dim objEMail As New MailMessage()

        objEMail.To = "myemail@email.com"
        objEmail.From = txtFrom.Text

  objEmail.Subject = "Contact Form"
  objEmail.Body = "IP: " & Request.ServerVariables("REMOTE_ADDR") & vbcrlf & "Date/Time: " &Now & vbcrlf & "Name: " &txtName.Text & vbcrlf & "Email: " &txtFrom.Text & vbcrlf & "Phone: " &txtPhone.Text & vbcrlf & "Comments: " &txtBody.Text
  objEmail.Priority = MailPriority.High
        SmtpMail.SmtpServer = "smtp.address.com"

  try
   SmtpMail.Send(objEMail)
   Response.Write("<font color='green'><strong>Thank you for contacting us. We will respond shortly.</strong></font>") 

  catch exc as Exception
   Response.Write("<font color='red'><strong>Send failure: </strong></font>" + exc.ToString())
  End Try
    End Sub
</script>
<html>
<head>
<title>Contact Form</title>
</head>
<body>

<form id="ContactMain" runat="server">
<table border="0" align="center" cellpadding="3" cellspacing="0" width="100%">
     <tr>
      <td valign="top" class="form-input" colspan="2">
          <label class="form-label-left">Name</label>
      <asp:TextBox runat="server" class="form-textbox" ID="txtName"></asp:TextBox>      
      </td>
     </tr>
     <tr>
       <td valign="top" class="form-input" colspan="2">
          <label class="form-label-left">Email <font color="red">*</font></label>
            <asp:TextBox runat="server" class="form-textbox" ID="txtFrom" ></asp:TextBox>    
            <asp:RequiredFieldValidator runat=server 
               ControlToValidate=txtFrom
               ErrorMessage="Please enter a valid Email address">
            </asp:RequiredFieldValidator>                    
        </td>
     </tr>
     <tr>
      <td valign="top" class="form-input" colspan="2">
          <label class="form-label-left">Phone</label>        
              <asp:TextBox runat="server" class="form-textbox" ID="txtPhone" ></asp:TextBox>
    </td>
     </tr>
     <tr>
       <td valign="top" class="form-input">
          <label class="form-label-left">Comments <font color="red">*</font></label>
         <asp:TextBox runat="server" TextMode="MultiLine" rows="6" cols="40" class="form-textarea" ID="txtBody"></asp:TextBox>
         <asp:RequiredFieldValidator runat=server 
            ControlToValidate=txtBody
            ErrorMessage="Please let us know what we can help you with">
         </asp:RequiredFieldValidator>    
       </td>
       </tr>
       <tr>
        <td colspan="2" valign="top" class="form-line">
            <asp:PlaceHolder ID="phTest" runat="server" Visible="true">
            <img src="captcha.ashx" id="imgCaptcha" />&nbsp;<a href="javascript:void(0);" onclick="RefreshImage('imgCaptcha');">Refresh</a><br />
            Write the characters in the image above<br />
            <asp:TextBox ID="txtCaptcha" runat="server"></asp:TextBox><br />
            <asp:Button Runat = server ID = btnSubmit OnClick = btnSubmit_Click Text = "Submit" class="form-submit-button"></asp:Button>
            </asp:PlaceHolder>
            <asp:PlaceHolder ID="phResult" runat="server" Visible="false">
            <p><asp:Label ID="lblResult" runat="server" Font-Bold="true"></asp:Label></p>
            <asp:Button ID="btnRetry" runat="server" Text="Take another test" />
            </asp:PlaceHolder>
        </td>
     </tr>
     </table>
</form>

</body>
</html>

问题是,您有两个不同的地方对btnSubmit作出响应。其中一个在.aspx文件的脚本标记中。这就是你发送电子邮件的地方。另一个位置在btnSubmit\u Click方法的代码隐藏文件中。这就是你检查验证码的地方

你有一个按钮可以触发两个事件。他们都在开火,这就是为什么你总是得到两个结果

您需要将电子邮件代码移动到btnSubmit\u中,单击验证码成功的代码

下面是更新后的代码,当验证码通过时调用send email方法。此外,您还需要从.aspx文件中删除发送电子邮件代码,并从btnSubmit按钮声明中删除此属性:OnClick=btnSubmit\u单击

Imports System.Web.Mail

Partial Class test
    Inherits System.Web.UI.Page

    Protected Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click
        If IsNothing(Session("ASPCAPTCHA")) OrElse Session("ASPCAPTCHA").ToString.Trim.Length = 0 Then
            lblResult.Text = "This test has expired."
            lblResult.ForeColor = Drawing.Color.Red
        Else
            Dim TestValue As String = txtCaptcha.Text.Trim.ToUpper(System.Globalization.CultureInfo.CreateSpecificCulture("en-US"))
            If StrComp(TestValue, Session("ASPCAPTCHA").ToString.Trim, CompareMethod.Text) = 0 Then
                lblResult.Text = "CAPTCHA PASSED"
                lblResult.ForeColor = Drawing.Color.Green
                ' The CAPTCHA passes so send the email
                Me.SendEmail()
            Else
                lblResult.Text = "CAPTCHA FAILED"
                lblResult.ForeColor = Drawing.Color.Red
            End If
            '//IMPORTANT: You must remove session value for security after the CAPTCHA test//
            Session.Remove("ASPCAPTCHA")
            '//////////
        End If

        phTest.Visible = False
        phResult.Visible = True
    End Sub

    ''' <summary>
    ''' This was the code you had in the aspx file.
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub SendEmail()
        Dim objEMail As New MailMessage()

        objEMail.To = "myemail@email.com"
        objEMail.From = txtFrom.Text

        objEMail.Subject = "Contact Form"
        objEMail.Body = "IP: " & Request.ServerVariables("REMOTE_ADDR") & vbCrLf & "Date/Time: " & Now & vbCrLf & "Name: " & txtName.Text & vbCrLf & "Email: " & txtFrom.Text & vbCrLf & "Phone: " & txtPhone.Text & vbCrLf & "Comments: " & txtBody.Text
        objEMail.Priority = MailPriority.High
        SmtpMail.SmtpServer = "smtp.address.com"

        Try
            SmtpMail.Send(objEMail)
            Response.Write("<font color='green'><strong>Thank you for contacting us. We will respond shortly.</strong></font>")

        Catch exc As Exception
            Response.Write("<font color='red'><strong>Send failure: </strong></font>" + exc.ToString())
        End Try
    End Sub


    Protected Sub btnRetry_Click(sender As Object, e As System.EventArgs) Handles btnRetry.Click

        txtCaptcha.Text = ""
        phTest.Visible = True
        phResult.Visible = False
    End Sub


End Class
导入System.Web.Mail
部分类测验
继承System.Web.UI.Page
受保护的子btnSubmit\u Click(发送者作为对象,e作为System.EventArgs)处理btnSubmit。Click
如果IsNothing(Session(“ASPCAPTCHA”)或lse Session(“ASPCAPTCHA”)。ToString.Trim.Length=0,则
lblResult.Text=“此测试已过期。”
lblResult.ForeColor=Drawing.Color.Red
其他的
Dim TestValue为String=txtCaptcha.Text.Trim.ToUpper(System.Globalization.CultureInfo.CreateSpecificCulture(“en-US”))
如果StrComp(TestValue,Session(“ASPCAPTCHA”).ToString.Trim,CompareMethod.Text)=0,则
lblResult.Text=“验证码通过”
lblResult.ForeColor=Drawing.Color.Green
“验证码通过,所以请发送电子邮件
Me.sendmail()
其他的
lblResult.Text=“验证码失败”
lblResult.ForeColor=Drawing.Color.Red
如果结束
“//重要提示:在验证码测试之后,必须删除会话值以确保安全性//
会话。删除(“ASPCAPTCHA”)
'//////////
如果结束
phTest.Visible=False
phResult.Visible=True
端接头
''' 
''这是你在aspx文件中的代码。
''' 
''' 
私有子SendEmail()
Dim objEMail作为新邮件消息()
objEMail.To=”myemail@email.com"
objEMail.From=txtFrom.Text
objEMail.Subject=“联系方式”
objEMail.Body=“IP:&Request.ServerVariables(“REMOTE_ADDR”)&vbCrLf&“Date/Time:&Now&vbCrLf&“Name:&txtName.Text&vbCrLf&”Email:&txtFrom.Text&vbCrLf&“Phone:&txtone.Text&vbCrLf&”注释:&txtBody.Text
objEMail.Priority=MailPriority.High
SmtpMail.SmtpServer=“smtp.address.com”
尝试
SmtpMail.Send(objEMail)
回复。写信(感谢您联系我们。我们将很快回复。)
捕获exc作为例外
Response.Write(“发送失败:”+exc.ToString())
结束尝试
端接头
受保护的子btnRetry\u单击(发件人作为对象,e作为系统.EventArgs)处理btnRetry。单击
txtCaptcha.Text=“”
phTest.Visible=True
phResult.Visible=False
端接头
末级
Imports System.Web.Mail

Partial Class test
    Inherits System.Web.UI.Page

    Protected Sub btnSubmit_Click(sender As Object, e As System.EventArgs) Handles btnSubmit.Click
        If IsNothing(Session("ASPCAPTCHA")) OrElse Session("ASPCAPTCHA").ToString.Trim.Length = 0 Then
            lblResult.Text = "This test has expired."
            lblResult.ForeColor = Drawing.Color.Red
        Else
            Dim TestValue As String = txtCaptcha.Text.Trim.ToUpper(System.Globalization.CultureInfo.CreateSpecificCulture("en-US"))
            If StrComp(TestValue, Session("ASPCAPTCHA").ToString.Trim, CompareMethod.Text) = 0 Then
                lblResult.Text = "CAPTCHA PASSED"
                lblResult.ForeColor = Drawing.Color.Green
                ' The CAPTCHA passes so send the email
                Me.SendEmail()
            Else
                lblResult.Text = "CAPTCHA FAILED"
                lblResult.ForeColor = Drawing.Color.Red
            End If
            '//IMPORTANT: You must remove session value for security after the CAPTCHA test//
            Session.Remove("ASPCAPTCHA")
            '//////////
        End If

        phTest.Visible = False
        phResult.Visible = True
    End Sub

    ''' <summary>
    ''' This was the code you had in the aspx file.
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub SendEmail()
        Dim objEMail As New MailMessage()

        objEMail.To = "myemail@email.com"
        objEMail.From = txtFrom.Text

        objEMail.Subject = "Contact Form"
        objEMail.Body = "IP: " & Request.ServerVariables("REMOTE_ADDR") & vbCrLf & "Date/Time: " & Now & vbCrLf & "Name: " & txtName.Text & vbCrLf & "Email: " & txtFrom.Text & vbCrLf & "Phone: " & txtPhone.Text & vbCrLf & "Comments: " & txtBody.Text
        objEMail.Priority = MailPriority.High
        SmtpMail.SmtpServer = "smtp.address.com"

        Try
            SmtpMail.Send(objEMail)
            Response.Write("<font color='green'><strong>Thank you for contacting us. We will respond shortly.</strong></font>")

        Catch exc As Exception
            Response.Write("<font color='red'><strong>Send failure: </strong></font>" + exc.ToString())
        End Try
    End Sub


    Protected Sub btnRetry_Click(sender As Object, e As System.EventArgs) Handles btnRetry.Click

        txtCaptcha.Text = ""
        phTest.Visible = True
        phResult.Visible = False
    End Sub


End Class