2012-06-26 62 views
1

我的網站允許用戶創建帳戶。在CreateUserWizard中不更換字符串註冊電子郵件

一旦創建,一個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> 
+1

您替換「VerifyUrl」,但模板值爲<%VerifyUrl%>。你確定更換工作正常嗎? – Tisho

+0

對不起。爲<%verifyUrl%>,在<%VerifyUrl%>「>有一個綠色的花線,並指出它找不到 – user1467175

+0

啊,OK,但還沒有 - 。你有‘verifyUrl’字符串中,而替換字符串是VerifyUrl這是一個。粘貼錯誤?替換是區分大小寫的 – Tisho

回答

0

我假設你正試圖複製MSDN中的example。如果沒有,你可能想引用這個例子的一些指針。

一些要點:
認識到<% %>語法在asp.net中是特殊的。在這種情況下,<%UserName%>語句對控件有特殊的含義,它用剛剛創建的UserName填充(參考上面的示例)。您的<%VerifyUrl%>對控件沒有特殊含義。它是電子郵件正文的一部分,ASP.NET將其視爲字符串中的某些字符。 (這就是綠色捲曲線完全不重要的原因)您只搜索字符串VerifyUrl。我不確定你的替換功能爲什麼不起作用,但是如果你的<a>標籤無法正常工作,因爲你的href值將被包裝在<% %>中。
相反,如果你改變了你的代碼

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

我相信你會替換正常工作,你最終會得到一個可用的網址。

作爲一個方面說明,我個人發現使用String.Format可以更容易和更可靠地在這些情況下實現,只要您記得正確地爲您的參數排序。

編輯: 我剛剛注意到這個問題已經過了6個月了,現在的答案可能無法幫到你,但我希望別人能夠從中獲得一些用處。

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) 

希望這有助於人。