我的网站允许用户创建帐户。
创建后,带有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>
答案 0 :(得分:0)
我假设您正在尝试复制MSDN中的example。如果没有,您可能希望引用该示例作为一些指针。
要说明的几点:
意识到<% %>
语法在asp.net中是特殊的。在此上下文中,<%UserName%>
语句对控件具有特殊含义,该控件使用刚创建的UserName填充它(参考上面的示例)。您的<%VerifyUrl%>
对控件没有特殊意义。它是电子邮件正文的一部分,ASP.NET将其视为字符串中的一些字符。 (这就是绿色卷曲线完全不重要的原因)您只搜索字符串VerifyUrl
。我不确定为什么你的替换功能不起作用,但是如果它确实你的<a>
标签无论如何都无法正常工作,因为你的href值会包含在<% %>
中。
相反,如果您将代码更改为
e.Message.Body.Replace("<%VerifyUrl%>", verifyUrl.ToString())
我相信您的替换工作正常,您最终会得到一个可用的网址。
作为旁注,我个人发现,只要您记得正确订购参数,在这些情况下使用String.Format
可以更轻松,更可靠。
编辑: 我刚刚注意到这个问题已经超过6个月了,答案现在可能对你没有帮助,但我希望其他人可以使用它。