#c# #asp.net #asp.net-mvc #asp.net-web-api
#c# #asp.net #asp.net-mvc #asp.net-web-api
Вопрос:
на asp. net web api я пытаюсь отправить письмо с подтверждением новому зарегистрированному пользователю, у которого есть ссылка, по которой при нажатии они активируют свою учетную запись, мне удалось отправить электронное письмо через SmtpClient и класс NetworkCredential, но как бы я ни описывал часть активации, я не хочу использовать identity 2. her — это код для отправки электронной почты.
public bool SendMail()
{
System.Net.Mail.MailMessage msg = new System.Net.Mail.MailMessage();
string strMessageBody = MailBody;
//System.Web.HttpContext.Current.Response.Write(strMessageBody);
msg.To.Add(MailTo);
if (MailCC != null amp;amp; MailCC.Length > 0)
{
msg.CC.Add(MailCC); ;
}
if (MailBCC != null amp;amp; MailBCC.Length > 0)
{
msg.Bcc.Add(MailBCC);
}
//msg.Sender = new System.Net.Mail.MailAddress(MailFrom);
msg.From = new System.Net.Mail.MailAddress(MailFrom);
msg.Subject = MailSubject;
msg.Body = strMessageBody;
msg.IsBodyHtml = true;
//System.Net.Mail.SmtpClient objSmtpClient = new System.Net.Mail.SmtpClient(_strSMTPServer);
//EmailContent c = (EmailContent)content;
SmtpClient mailClient = new SmtpClient();
NetworkCredential basicAuthenticationInfo = new NetworkCredential();
basicAuthenticationInfo.UserName = ConfigurationManager.AppSettings["userName"].ToString();
basicAuthenticationInfo.Password = ConfigurationManager.AppSettings["password"].ToString();
mailClient.UseDefaultCredentials = false;
mailClient.Credentials = basicAuthenticationInfo;
mailClient.Host = ConfigurationManager.AppSettings["host"].ToString();
mailClient.Port = Convert.ToInt32(ConfigurationManager.AppSettings["port"].ToString());
mailClient.EnableSsl = true;
System.Net.Mail.MailMessage mailmessage = msg;
mailmessage.IsBodyHtml = true;
mailClient.DeliveryMethod = SmtpDeliveryMethod.Network;
mailmessage.SubjectEncoding = System.Text.Encoding.UTF8;
mailmessage.BodyEncoding = System.Text.Encoding.UTF8;
mailClient.Send(mailmessage);
return true;
}
Ответ №1:
Перед отправкой электронного письма создайте токен аутентификации для пользователя и добавьте его в ссылку активации в качестве дополнительного параметра. В действии, которое запускается по этой ссылке, вы можете просто проверить токен и активировать пользователя, если он правильный, или передать токен для просмотра входа, сохранить его в скрытом поле и проверить после публикации вместе с именем пользователя и паролем. Лично я предпочитаю второй вариант.
Токен может быть сгенерирован несколькими способами. Например, путем создания хэша некоторых (или всех) данных, предоставленных пользователем, таких как имя пользователя пароль дата регистрации. Затем при проверке токена вы можете проверить, соответствует ли он токену, хранящемуся в базе данных для этого пользователя, или (если вы не хотите его сохранять) хэшу, сгенерированному таким образом снова во время проверки. Если комбинация имя пользователя пароль и токен верны, вы можете установить учетную запись этого пользователя активной и разрешить вход в систему.
Кстати, у вас есть две переменные типа System.Net.Mail.MailMessage
— msg
и mailmessage
, и я думаю, что использования только одной будет достаточно.
Комментарии:
1. В теле электронного письма должно быть скрытое поле, содержащее токен?