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

时间:2013-11-22 09:55:13

标签: 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 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);

我需要激活页面中的ID才能将“已激活”列从“否”更改为“是”。

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

2 个答案:

答案 0 :(得分:1)

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

您可以通过创建哈希来轻松创建“安全”身份验证,例如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>");

答案 1 :(得分:1)

首先,我肯定会考虑加密您在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>

并在activation.aspx.cs页面中获取ID:

string sID = Uri.UnescapeDataString(Request.QueryString["sID"]);