如何发送包含C#中带有参数的链接的电子邮件?

如何发送包含C#中带有参数的链接的电子邮件?,c#,visual-studio,smtp,visual-studio-2013,C#,Visual Studio,Smtp,Visual Studio 2013,我是asp.net的新手。我正在用C#构建一个基于web的应用程序,我考虑了很多关于如何使用电子邮件通过用户ID对其进行身份验证的问题 我搜索了一下,并尝试了这段代码,但没有成功,因为它发送了一个页面,而不是ID链接 string URI = "http://localhost:49496/Activated.aspx"; string myParameters = "param1="+id.Text; string HtmlResult = ""; using (WebClient w

我是asp.net的新手。我正在用C#构建一个基于web的应用程序,我考虑了很多关于如何使用电子邮件通过用户ID对其进行身份验证的问题

我搜索了一下,并尝试了这段代码,但没有成功,因为它发送了一个页面,而不是ID链接

 string URI = "http://localhost:49496/Activated.aspx";
 string myParameters = "param1="+id.Text;
 string HtmlResult = "";
 using (WebClient wc = new WebClient())
 {
     wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
     HtmlResult = wc.UploadString(URI, myParameters);
 }

 MailMessage o = new MailMessage("f@hotmail.com", EMPemail, "KAUH Account Activation", "Hello, " + name + "<br /> Your KAUH Account about to activate click the link below to complete the activation process <br />" + HtmlResult);

 NetworkCredential netCred = new NetworkCredential("f@hotmail.com", "______");
 SmtpClient smtpobj = new SmtpClient("smtp.live.com", 587);
 smtpobj.EnableSsl = true;
 o.IsBodyHtml = true;
 smtpobj.Credentials = netCred;
 smtpobj.Send(o);
stringuri=”http://localhost:49496/Activated.aspx";
字符串myParameters=“param1=”+id.Text;
字符串HtmlResult=“”;
使用(WebClient wc=new WebClient())
{
wc.Headers[HttpRequestHeader.ContentType]=“application/x-www-form-urlencoded”;
HtmlResult=wc.UploadString(URI,myParameters);
}
MailMessage o=新的MailMessage(“f@hotmail.com,电子邮件,“KAUH帐户激活”,“您好,“+name+”
您的KAUH帐户将要激活,请单击下面的链接以完成激活过程
“+HtmlResult); NetworkCredential netCred=新的NetworkCredential(“f@hotmail.com", "______"); SmtpClient smtpobj=新的SmtpClient(“smtp.live.com”,587); smtpobj.EnableSsl=true; o、 IsBodyHtml=true; smtpobj.Credentials=netCred; smtpobj.Send(o);
我需要激活页面中的ID将“激活”列从否更改为是


现在我的问题是:通过发送ID对用户进行身份验证的想法是否安全?如果安全,我如何执行它?

对用户进行身份验证的最佳方法

您可以通过创建散列(例如MD5或SHA1)轻松创建“安全”身份验证。您散列的信息可以是,例如,将电子邮件和用户ID作为字符串追加。您可以将散列保存在数据库中,以便进行快速比较(当用户单击包含您创建的散列的链接时进行比较)。当散列在数据库中时,身份验证就完成了

您还可以将电子邮件附加到链接,这样您就可以99.9999%确定了。然而,这并不是真正需要的,因为最终用户不知道ID

发送页面而不是链接问题

您正在添加
HtmlResult
,其中包含使用
wc.UploadString
请求的页面内容。使用HTML在电子邮件正文中手动创建链接:

MailMessage o = new MailMessage("f2@hotmail.com", EMPemail, "KAUH Account Activation", "Hello, " + name + "<br /> Your KAUH Account about to activate click the link below to complete the activation process <br /><a href=\"" + URI + "?" + myParameters + "\">Click here</a>");
MailMessage o=新的MailMessage(“f2@hotmail.com,电子邮件,“KAUH帐户激活”,“您好,“+name+”
您的KAUH帐户将要激活,请单击下面的链接以完成激活过程
);
首先,我肯定会考虑对URL中的ID进行加密。只需将ID留空,您就容易受到攻击

此外,如果您的正文是html,您应该能够在正文中添加类似的链接:

string sURL= "http://localhost:49496/Activated.aspx?sID=" + Uri.EscapeDataString(id.Text);
然后将以下内容添加到HTML正文中:

<a style='text-decoration: none; font-weight: bold;' href='" + sURL+ "'>Click Here to Activate</a>

非常感谢@BossRoss,但是我如何从激活页面的URL中获取ID?请注意第一个代码段编辑(我在URL中添加了“sID=”),然后在激活页面中获取ID:string sID=Request.QueryString[“sID”];对我的答案进行了编辑,以便更清楚地了解激活页面ID检索。如果我的答案是您的解决方案,那么请不要忘记将其标记为其他用户的答案。
string sID = Uri.UnescapeDataString(Request.QueryString["sID"]);