Как решить проблему аутентификации SMTP-сервера
Привет, я пытаюсь исправить код, который может получить электронную почту и пароль из таблицы данных с помощью события нажатия кнопки. Я хочу проверить, совпадают ли электронное письмо, отправленное пользователем, и то, которое было извлечено из таблицы данных, а затем отправлено по почте, но я не получаю того, что хочу.
В сообщении об ошибке говорится:
Цитата:Сообщение=SMTP-серверу требуется безопасное соединение или клиент не прошел проверку подлинности. Ответ сервера был следующим: 5.5.1 требуется аутентификация
ниже приведен мой код:
protected void eMailSubmit_Click(object sender, EventArgs e) { string username = ""; string password = ""; SqlConnection con = new SqlConnection(@"Data Source=My_DataBae;Integrated Security=False;"); SqlCommand cmd = new SqlCommand("SubmitEmail", con); cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add("@Email", SqlDbType.NVarChar).Value = TextBoxSubmiteMail.Text; con.Open(); SqlDataReader sdr = cmd.ExecuteReader(); { if (sdr.Read()) { username = sdr["username"].ToString(); password = sdr["password"].ToString(); } } con.Close(); if (username != TextBoxSubmiteMail.Text) { lblemailSubmit.Text = "The submitted eMail does not belong to this account, check the eMail and try again"; } else if (!string.IsNullOrEmpty(password)) { MailMessage msg = new MailMessage(); msg.From = new MailAddress("myMail@gmail.com"); msg.To.Add(TextBoxSubmiteMail.Text); msg.Subject = " Recover your Password"; msg.Body = ("Your Username is:" + username + "<br/><br/>" + "Your Password is:" + password); msg.IsBodyHtml = true; SmtpClient smt = new SmtpClient(); smt.Host = "smtp.gmail.com"; System.Net.NetworkCredential ntwd = new NetworkCredential(); ntwd.UserName = "myMail@gmail.com"; //Your Email ID ntwd.Password = ""; // Your Password smt.UseDefaultCredentials = true; smt.Credentials = ntwd; smt.Port = 587; smt.EnableSsl = true; smt.Send(msg); lblemailSubmit.Text = "Username and Password Sent Successfully"; lblemailSubmit.ForeColor = System.Drawing.Color.ForestGreen; }
это моя хранимая процедура:
CREATE PROCEDURE [dbo].[SubmitEmail] ( @Email nvarchar(20) ) AS BEGIN SET NOCOUNT ON; ( SELECT Email, Password FROM My_Table WHERE Email= @email ) END;
Как мне устранить эту ошибку?
Я
Что я уже пробовал:
Я попытался ввести свой пароль электронной почты.
Richard Deeming
НИКОГДА храните пароли в виде обычного текста, а также НИКОГДА отправьте пароль пользователя по электронной почте.
Вы должны хранить только соленый хэш пароля пользователя, используя уникальную соль для каждой записи.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хеширование паролей - все правильно[^]
Если пользователь не может вспомнить свой пароль, нет необходимости отправлять ему существующий пароль. Вместо этого отправьте им одноразовую ссылку, которая позволит им сбросить свой пароль на что-то другое.
Все, что вы когда-либо хотели знать о создании безопасной функции сброса пароля[^]
Richard Deeming
Кроме того, попробуйте установить smt.UseDefaultCredentials = false;
вместо true
. Установка его в true
сделает свое SmtpClient
класс игнорирует учетные данные, предоставленные в Credentials
собственность.
И, вероятно, было бы проще хранить настройки SMTP в конфигурационном файле:
system.net / mailSettings / smtp / сеть[^]
Kornfeld Eliyahu Peter
Почему бы не вставить эти два комментария в решение?
Richard Deeming
Сделано. :)
F-ES Sitecore
Это один из самых часто задаваемых вопросов, пожалуйста, сделайте базовый поиск, например, с помощью google, прежде чем писать.