C# 在PasswordRecovery电子邮件中包含除和以外的变量

C# 在PasswordRecovery电子邮件中包含除和以外的变量,c#,asp.net,C#,Asp.net,我试图在通过我的C web应用程序中的PasswordRecovery控件生成的电子邮件中包含一个附加变量。我有一个User_Profile表,其中包含用户的名字和姓氏,但我无法确定如何通过变量用法将这些信息传递给HTML电子邮件模板。工作很好,但当我试图传递firstName时,我得到的只是占位符。以下是我所拥有的: ASPX: 重置我的密码 忘记密码了?在下面输入您的用户名 重置我的密码 身份确认 请回答以下安全问题以接收新密码 用户名: 问题: 答复: 重置我的密码 您的新密码已发送到您的

我试图在通过我的C web应用程序中的PasswordRecovery控件生成的电子邮件中包含一个附加变量。我有一个User_Profile表,其中包含用户的名字和姓氏,但我无法确定如何通过变量用法将这些信息传递给HTML电子邮件模板。工作很好,但当我试图传递firstName时,我得到的只是占位符。以下是我所拥有的: ASPX:

重置我的密码 忘记密码了?在下面输入您的用户名

重置我的密码 身份确认 请回答以下安全问题以接收新密码

用户名: 问题: 答复: 重置我的密码 您的新密码已发送到您的注册电子邮件地址

HTML电子邮件模板:

根据我们的记录。。。您的新密码是:

多谢各位

C:


我意识到GetUserProfile/HiddenField方法可能不是最好的,但它存储并检索“firstName”变量的正确值。故障似乎发生在e.Message.Body.Replace,firstName;但是我没有发现任何错误,也无法确定占位符为什么没有被替换。你知道我在这里做错了什么吗?提前谢谢你的关注,如果你能提供帮助,我们将不胜感激。

在这里找到了我的答案:。e、 Message.Body.Replace,firstName;这是不正确的。正确的方法是e.Message.Body=e.Message.Body.Replace,firstName.ToString;。占位符现在已正确替换为所需的值。谢谢。

应该对密码进行哈希运算,以便您不能返回密码,@prospector Yes,但当您试图重置密码时,必须能够获取未更改的密码,以便用户知道新密码是什么。@mason-不一定为真@罗布,我没有读所有这些。你能总结一下重要的部分吗?我想应该是发送一个令牌,然后让用户在站点上重置密码?虽然这是正确的,但这并不能真正帮助巴巴多斯,因为他试图在email.FWIW中嵌入重置密码,我没有试图返回密码;我只是想在发送的电子邮件中添加一些额外的数据,其中已经包含了新重置的密码。
protected void ResetPassword_SendingMail(object sender, MailMessageEventArgs e)
{
    GetUserProfile();
    string firstName = hfFirstName.Value;
    e.Message.Body.Replace("<%FirstName%>", firstName);
}

private void GetUserProfile()
{
    string userName = (Convert.ToString(((TextBox)ResetPassword.Controls[0].FindControl("UserName")).Text));

    using (SqlConnection con = new SqlConnection(sqlConString))
    {
        try
        {
            SqlCommand cmd = new SqlCommand(
            @"SELECT * 
            FROM [dbo].[User_Profile] UP
            INNER JOIN [Users] U
            ON U.[UserId] = UP.[UserId]
            WHERE U.[UserName] = @userName");
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add(new SqlParameter("@userName", userName));
            con.Open();

            SqlDataReader PopulateReader;
            PopulateReader = cmd.ExecuteReader();

            while (PopulateReader.Read())
            {
                hfFirstName.Value = (PopulateReader["FirstName"].ToString());
            }
        }
        catch (Exception ex)
        {
            log.InfoFormat("Exception caught in GetUserProfile(): {0}", ex.ToString());
            log.Info(Environment.NewLine + "End Exception" + Environment.NewLine);
        }
    }
}