Истекает подтверждение по электронной почте через 48 часов в asp.net
Я отправляю подтверждение email
моим пользователям, и когда они нажмут на них, их учетная запись станет активной. Единственное, что я хочу, это то, что срок действия ссылки истекает через 48 часов, и пользователь может снова зарегистрироваться с этим username
, Кто-нибудь может мне помочь? вот мой код электронной почты:
Session["UserName"] = TextBox_email.Text;
MailMessage msg = new MailMessage();
StringBuilder bodyMsg = new StringBuilder();
MembershipUser user = Membership.CreateUser(TextBox_email.Text, TextBox_Pass.Text, TextBox_email.Text);
Roles.AddUserToRole(TextBox_email.Text, "Author");
user.IsApproved = false;
Membership.UpdateUser(user);
// StringBuilder bodyMsg = new StringBuilder();
Guid userID = (Guid)user.ProviderUserKey;
msg.Subject = "Submission Confirmation";
bodyMsg.Append("<html><head><img src=" + "http://waag.ir/images/header.jpg" + ">" + "<title>CONFIRMATION EMAIL:</title></head><body>");
bodyMsg.Append("<br/>");
string link = string.Format("http://www.waag.ir/Activate.aspx?userID={0}", userID.ToString());
bodyMsg.Append("Dear " + RadioButtonList_Prefix.SelectedItem.Text + " " + name.Text + " " + middle.Text + " " + lastname.Text + ":<br> Thank you for registering with Avestia Publishing manuscript submission system. To confirm and complete your registration, please follow the link below:</br>" + link + "</br>This link is active for 48 hours. If the link is not visited within this time frame, your registration will be discarded and you will need to register again.</br></br></br>Best regards,</br>Avestia Publishing</br>http://avestia.com");
msg.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8");
msg.Priority = MailPriority.High;
msg.Body = bodyMsg.ToString();
msg.IsBodyHtml = true;
msg.BodyEncoding = System.Text.Encoding.GetEncoding("utf-8");
msg.Priority = MailPriority.High;
// msg.ReplyTo = new MailAddress(TextBox2.Text);
msg.From = new MailAddress("goldenstudio@goldenstudio.ir");
msg.To.Add(new MailAddress(TextBox_email.Text));
SmtpClient mailsender = new SmtpClient();
mailsender.Host = "SmtpClient.goldenstudio.ir";
mailsender.Port = 587;
mailsender.EnableSsl = true;
mailsender.Credentials = new System.Net.NetworkCredential("goldenstudio@goldenstudio.ir", "classaspnet");
SmtpClient smtp = new SmtpClient();
//Literal1.Text = "<script>alert(' ')</script>";
smtp.Send(msg);
3 ответа
Вам необходимо записать в базе данных, когда электронное письмо было отправлено, а затем сравнить эту дату с датой, по которой пользователь нажимает на ссылку. Так, например, вы отправляете электронное письмо в 31.12.2012 18:22, а я нажимаю на ссылку 01.01.2013 18:22, тогда это всего 1 день.
Вам нужно будет встроить логику либо в хранимую процедуру, либо в код asp.net, который запускается на странице подтверждения, проверяющей это поле DateSent.
редактировать
Вы "истекаете" ссылку, делая ее действительной только до определенной даты. Если пользователь пытается использовать ссылку после даты, то вы рассматриваете ее как просроченную и показывает соответствующее сообщение. Но вам нужно сохранить дату в базе данных, в моем первоначальном предложении я сказал сохранить дату, которую вы отправили по электронной почте (в поле DateSent), и сравнить с этим, другой ответ предлагает установить дату истечения срока действия ссылки (в поле ExpiryDate). Любой подход будет работать, они просто приходят к проблеме с разных сторон проблемы.
Добавьте столбец в свой Users
стол (я полагаю, у вас есть) называется ConfirmationDueDate
и установите его на 48 часов с момента нажатия пользователем OK
создать учетную запись. Когда пользователь нажимает на ссылку, если текущее время прошло ConfirmationDueDate
значение, вернуть их на страницу создания учетной записи.
Вам необходимо записать в базе данных, когда электронное письмо было отправлено, а затем сравнить эту дату с датой, по которой пользователь нажимает на ссылку. Так, например, вы отправляете электронное письмо в 31.12.2012 18:22, а я нажимаю на ссылку 01.01.2013 18:22, тогда это всего 1 день.
Вам нужно будет встроить логику либо в хранимую процедуру, либо в код asp.net, который запускается на странице подтверждения, проверяющей это поле DateSent.
Изменить Вы "истекаете" ссылку, делая ее действительной только до определенной даты. Если пользователь пытается использовать ссылку после даты, то вы рассматриваете ее как просроченную и показывает соответствующее сообщение. Но вам нужно сохранить дату в базе данных, в моем первоначальном предложении я сказал сохранить дату, которую вы отправили по электронной почте (в поле DateSent), и сравнить с этим, другой ответ предлагает установить дату истечения срока действия ссылки (в поле ExpiryDate). Любой подход будет работать, они просто приходят к проблеме с разных сторон проблемы.