1

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

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

问题:电子邮件发送成功,但不幸的是验证 URL 没有出现。

而对于

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

“<%VerifyUrl%>”下面有一个绿色的卷线,表示找不到这个文件。

这是 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>
4

2 回答 2

0

我假设您正在尝试复制 MSDN 中的示例。如果没有,您可能希望参考该示例以获取一些指针。

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

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

我相信您的 Replace 会正常工作,您最终会得到一个可用的 URL。

作为旁注,我个人发现,String.Format只要您记得正确排序参数,在这些情况下使用可以更容易和更可靠地实现。

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

于 2013-01-19T03:35:43.443 回答
0

不是解决方案,但解决方法是:

    Dim Email = RegisterUser.Email
    Dim UserID = Membership.GetUser(RegisterUser.UserName).ProviderUserKey
    Dim user1 As MembershipUser = Membership.GetUser(RegisterUser.UserName)
    Dim verifyUrl As String = Server.HtmlEncode(Request.Url.GetLeftPart(UriPartial.Authority) + Page.ResolveUrl("~/Account/ActivateUsers.aspx?UserID=") + UserID.ToString + "&Email=" + RegisterUser.Email)
    e.Message.Body = "<!DOCTYPE html>"
    e.Message.Body += "<html xmlns=""http://www.w3.org/1999/xhtml"">"
    e.Message.Body += "<head>"
    e.Message.Body += "<title></title>"
    e.Message.Body += "<style>body{text-decoration:none;font-family:Arial, Verdana, sans-serif;font-size:10.0pt;font-weight:normal;text-align:left;overflow: visible;}</style>"
    e.Message.Body += "</head>"
    e.Message.Body += "<body>"
    e.Message.Body += "<p>Thank you for registering. To activate your account please click on the link below:<BR /><BR />"
    e.Message.Body += verifyUrl
    e.Message.Body += "</p>"
    e.Message.Body += "</body>"
    e.Message.Body += "</html>"
    e.Message.To.Add(Email.Trim())
    e.Message.Subject = "xxxxxx Account activation Email"
    Dim smtpMail As SmtpClient = New SmtpClient()
    smtpMail.Send(e.Message)

希望这可以帮助某人。

于 2015-08-14T09:10:10.100 回答