none
Recurso Esqueci minha senha

    Question

  • Olá, tenho um sistema que utiliza banco de dados SQL Server e preciso retornar ao usuário o seu nome de usuário e senha caso ele tenha esquecido.

    Já inseri todo o recurso para realizar essa operação, porem não consigo enviar por e-mail usuario e senha.

    Atualmente está assim:

    o usuário faz um cadastro com usuario, senha e e-mail e caso tenha esquecido, ele digita o e-mail e solicita novamente a senha.

    Procedure:

     

    PROCEDURE [dbo].[S_BUSCAR_LOGIN]

    @email    VARCHAR(50)

    AS
    DECLARE @USUARIO VARCHAR(50), @SENHA VARCHAR(30)

    IF EXISTS (SELECT email FROM Participante WHERE email = @email)
        BEGIN
            SELECT @USUARIO = USUARIO, @SENHA = SENHA FROM PARTICIPANTE WHERE EMAIL = @email       
        END   
    ELSE
        BEGIN
            RETURN 2
        END

    Codigo:

        Protected Sub btnEnviar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
            Dim comando As New SqlCommand("S_BUSCAR_LOGIN", conexao)
            comando.CommandType = CommandType.StoredProcedure
            comando.Parameters.Add("@email", SqlDbType.VarChar).Value = txtEmail.Text
            comando.Parameters.Add("@RETURN_VALUE", SqlDbType.Int).Direction = ParameterDirection.ReturnValue
            conexao.Open()
            comando.ExecuteNonQuery()
            Dim retorno As Integer = Convert.ToInt32(comando.Parameters("@RETURN_VALUE").Value)
            conexao.Close()
            If retorno <> 2 Then
                EnviaEmail()
                Response.Write("<script>window.alert('A nova senha foi enviada para o e-mail " & txtEmail.Text & "');</script>")
            Else
                Response.Write("<script>window.alert('O e-mail informado não está cadastrado em nossa base de dados!');</script>")
            End If
        End Sub

     

    Public Sub EnviaEmail()
            Dim de As New MailAddress("contato@empresa.com.br", "Recuperação de senha")
            Dim para As New MailAddress(txtEmail.Text)
            Dim mensagem As New MailMessage(de, para)
            mensagem.Subject = "Recuperação de senha"
            mensagem.Body = "Prezado(a) Senhor(a),<br /><br />" & "Segue o seu usuário e sua senha para acesso. <br /><br />" & "<b>Usuário:</b><br /><br />" & "<b>Senha:</b>"
            mensagem.IsBodyHtml = True
            Dim smtp As New SmtpClient("smtp2.empresa.com.br")
            Try
                smtp.Send(mensagem)
            Catch ex As Exception
                Response.Write("<script>window.alert('Erro no envio do e-mail com a sua senha, tente novamente!');</script>")
            Finally
            End Try
        End Sub

     

    Alguem pode me ajudar?

    Monday, March 22, 2010 6:23 PM

Answers

  • Com a ajuda de um amigo estou quase conseguindo resolver o problema, o que acontece é q não consigo retornar a senha.. aparece o seguinte erro:

     

    Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

    Detalhes da Exceção: System.IndexOutOfRangeException: RESULTADO2

    Erro de Origem:

    Linha 143:            If sdr.Read() Then
    Linha 144: SESSION("nome_login") = sdr("RESULTADO").ToString()
    Linha 145: SESSION("senha_login") = sdr("RESULTADO2").ToString()
    Linha 146: End If
    Linha 147:

    Segue o codigo e logo abaixo a procedure:

     

        Protected Sub btnEnviar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
            Dim parametros As New ArrayList
            parametros.Add(CriaParametro("@email", DbType.String, txtEmail.Text))

            Using sdr As SqlDataReader = ExecuteReader("S_BUSCAR_LOGIN", CommandType.StoredProcedure, parametros)

                If sdr.Read() Then
                    SESSION("nome_login") = sdr("RESULTADO").ToString()
                    SESSION("senha_login") = sdr("RESULTADO2").ToString()
                End If

            End Using

            If ((SESSION("nome_login") <> "")) Then
                EnviaEmail()
                Response.Write("<script>window.alert('A nova senha foi enviada para o e-mail " & txtEmail.Text & "');</script>")
            Else
                Response.Write("<script>window.alert('O e-mail informado não está cadastrado em nossa base de dados!');</script>")
            End If
        End Sub

     

    PROCEDURE [dbo].[S_BUSCAR_LOGIN]

    @email    VARCHAR(50)

    AS

    IF EXISTS (SELECT email FROM Participante WHERE email = @email)
        BEGIN
            SELECT RESULTADO = USUARIO FROM PARTICIPANTE WHERE EMAIL = @email
            SELECT RESULTADO2 = SENHA FROM PARTICIPANTE WHERE EMAIL = @email       
        END   
    ELSE
        BEGIN
            RETURN 2
        END

    • Marked as answer by Kleber Caires Tuesday, March 23, 2010 7:22 PM
    Tuesday, March 23, 2010 6:26 PM
  • Resolvido!

    Alterei o select da procedura para:

    SELECT RESULTADO = USUARIO, RESULTADO2 = SENHA FROM PARTICIPANTE WHERE EMAIL = @email

    • Marked as answer by Kleber Caires Tuesday, March 23, 2010 7:22 PM
    Tuesday, March 23, 2010 7:21 PM

All replies

  • O código não retorna nenhum error?
    Monday, March 22, 2010 6:25 PM
  • Não, e inclusive envia o e-mail pro usuário.

    só que o e-mail chega da seguinte forma:

     

    Prezado(a) Senhor(a),


    Segue o seu usuário e sua senha para acesso.

    Usuário:

    Senha:

     

    Exatamente pq não estou sabendo como passar no e-mail o usuario e senha da pessoa.

     

    Monday, March 22, 2010 6:28 PM
  • Você deveria pegar o retorno do seu select e passar como parâmetro no seu método "EnviaEmail()";

     

     

     

    Att.

    Monday, March 22, 2010 6:56 PM
  • Jagner,

    Não consegui fazer.

    Alterei a procedure para resultado receber o usuario e resultado2 receber a senha e recebi o seguinte erro:

     

    Mensagem de Erro do Compilador: BC30455: Argumento não foi especificado para parâmetro 'resultado' de 'Public Sub EnviaEmail(resultado As String, resultado2 As String)'.

    Monday, March 22, 2010 7:04 PM
  • Com a ajuda de um amigo estou quase conseguindo resolver o problema, o que acontece é q não consigo retornar a senha.. aparece o seguinte erro:

     

    Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

    Detalhes da Exceção: System.IndexOutOfRangeException: RESULTADO2

    Erro de Origem:

    Linha 143:            If sdr.Read() Then
    Linha 144: SESSION("nome_login") = sdr("RESULTADO").ToString()
    Linha 145: SESSION("senha_login") = sdr("RESULTADO2").ToString()
    Linha 146: End If
    Linha 147:

    Segue o codigo e logo abaixo a procedure:

     

        Protected Sub btnEnviar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnEnviar.Click
            Dim parametros As New ArrayList
            parametros.Add(CriaParametro("@email", DbType.String, txtEmail.Text))

            Using sdr As SqlDataReader = ExecuteReader("S_BUSCAR_LOGIN", CommandType.StoredProcedure, parametros)

                If sdr.Read() Then
                    SESSION("nome_login") = sdr("RESULTADO").ToString()
                    SESSION("senha_login") = sdr("RESULTADO2").ToString()
                End If

            End Using

            If ((SESSION("nome_login") <> "")) Then
                EnviaEmail()
                Response.Write("<script>window.alert('A nova senha foi enviada para o e-mail " & txtEmail.Text & "');</script>")
            Else
                Response.Write("<script>window.alert('O e-mail informado não está cadastrado em nossa base de dados!');</script>")
            End If
        End Sub

     

    PROCEDURE [dbo].[S_BUSCAR_LOGIN]

    @email    VARCHAR(50)

    AS

    IF EXISTS (SELECT email FROM Participante WHERE email = @email)
        BEGIN
            SELECT RESULTADO = USUARIO FROM PARTICIPANTE WHERE EMAIL = @email
            SELECT RESULTADO2 = SENHA FROM PARTICIPANTE WHERE EMAIL = @email       
        END   
    ELSE
        BEGIN
            RETURN 2
        END

    • Marked as answer by Kleber Caires Tuesday, March 23, 2010 7:22 PM
    Tuesday, March 23, 2010 6:26 PM
  • Resolvido!

    Alterei o select da procedura para:

    SELECT RESULTADO = USUARIO, RESULTADO2 = SENHA FROM PARTICIPANTE WHERE EMAIL = @email

    • Marked as answer by Kleber Caires Tuesday, March 23, 2010 7:22 PM
    Tuesday, March 23, 2010 7:21 PM