CreateUserWizard注册电子邮件中不替换字符串

时间:2012-06-26 16:13:51

标签: c# asp.net

我的网站允许用户创建帐户。

创建后,带有URL的电子邮件验证将发送到用户的电子邮件。

问题:发送电子邮件有效,但遗憾的是验证网址未显示。

<a href="<%VerifyUrl%>"<%verifyUrl%></a></p> 

“&lt;%VerifyUrl%&gt;”下面有一条绿色的卷曲线,表示无法找到此文件。

这是Login.aspx的源代码:

protected void CreateUserWizard1_SendingMail(object sender,MailMessageEventArgs e)
{
    MembershipUser userInfo = Membership.GetUser(CreateUserWizard1.UserName);

    //Construct the verification URL
    string verifyUrl = Request.Url.GetLeftPart(UriPartial.Authority) + Page.ResolveUrl("~/Verify.aspx?ID=" + userInfo.ProviderUserKey.ToString());

   // Replace <%VerifyUrl%> placeholder with verifyUrl value
    e.Message.Body = e.Message.Body.Replace("VerifyUrl", verifyUrl.ToString());
}

这是用户在其电子邮件中看到的html文件:

<h2> Welcome to My Website!</h2>
<p>
    Hello, <%UserName%>. You are receiving this email because you recently created a new account at my 
    site. Before you can login, however, you need to first visit the following link:</p>
<p>
    <a href="<%VerifyUrl%>"><%verifyUrl%></a></p>
<p>
    After visiting the above link you can log into the site!</p>
<p>
    If you have any problems verifying your account, please reply to this email to 
    get assistance.</p>
<p>
    Thanks!</p>

1 个答案:

答案 0 :(得分:0)

我假设您正在尝试复制MSDN中的example。如果没有,您可能希望引用该示例作为一些指针。

要说明的几点:
意识到<% %>语法在asp.net中是特殊的。在此上下文中,<%UserName%>语句对控件具有特殊含义,该控件使用刚创建的UserName填充它(参考上面的示例)。您的<%VerifyUrl%>对控件没有特殊意义。它是电子邮件正文的一部分,ASP.NET将其视为字符串中的一些字符。 (这就是绿色卷曲线完全不重要的原因)您只搜索字符串VerifyUrl。我不确定为什么你的替换功能不起作用,但是如果它确实你的<a>标签无论如何都无法正常工作,因为你的href值会包含在<% %>中。
相反,如果您将代码更改为

e.Message.Body.Replace("<%VerifyUrl%>", verifyUrl.ToString())

我相信您的替换工作正常,您最终会得到一个可用的网址。

作为旁注,我个人发现,只要您记得正确订购参数,在这些情况下使用String.Format可以更轻松,更可靠。

编辑: 我刚刚注意到这个问题已经超过6个月了,答案现在可能对你没有帮助,但我希望其他人可以使用它。