вы можете сохранить путь изображения в базе данных или сохранить изображение как BLOB (двоичный - массив байтов) .. это зависит от вашего случая, если ваше приложение является веб-приложением, а затем сохраните путь изображения намного лучше. Но если вы получили клиентское приложение, которое подключается к централизованной базе данных, вы должны сохранить его как двоичный.
Это обычно происходит при попытке входа в систему из другого часового пояса или компьютера IP-адреса. Ваш производственный сервер и почтовый идентификатор, который вы использовали, находятся в другом часовом поясе. Выберите любое из одного решения:
1) Войдите на рабочий сервер через удаленный доступ и войдите в gmail один раз с вашими учетными данными. Они запросят подтверждение, подтвердят его и выйдут из системы.
Или 2) войдите в gmail на свой локальный компьютер, выполните следующие действия Link и выберите , чтобы просмотреть это действие и предпринять правильные действия.
Я использовал все вышеупомянутые решения, но в конечном итоге работал только после того, как я включил IMAP-доступ из настроек Gmail Ссылка на включение доступа IMAP в настройках gmail
Конечно, точки в других решениях тоже требовались.
Привет, у меня была такая же проблема,
, что я сделал для ее решения. заключается в том, чтобы включить менее безопасное приложение. после подключения к моей учетной записи gmail. Я ввел эту ссылку: https://www.google.com/settings/security/lesssecureapps
Затем включите защищенное приложение, и оно сработало. было сказано выше
При попытке отправить почту из кода и вы обнаружите ошибку «Для SMTP-сервера требуется защищенное соединение или клиент не был аутентифицирован. Ответ сервера: 5.5.1 Требуется аутентификация», чем может произойти ошибка из-за в следующих случаях.
случай 1: когда пароль неверен
случай 2: при попытке войти в систему из приложения App
3: когда вы пытаетесь войдите в домен из другого домена, кроме вашего часового пояса / домена / компьютера (Это относится к большинству сценариев при отправке почты из кода).
Существует решение для каждого
решение для случая 1: Введите правильный пароль.
решение 1 для случая 2: перейдите к настройкам безопасности по следующей ссылке https://www.google. com / settings / security / lesssecureapps и включить менее безопасные приложения. Таким образом, вы сможете войти в систему со всех приложений.
решение 2 для случая 2: (см. https://stackoverflow.com/a/9572958/52277 ) включить два -факторная аутентификация (ака двухэтапная аутентификация), а затем генерировать пароль для приложения. Используйте этот вновь сгенерированный пароль для аутентификации через SMTP.
решение 1 для случая 3: (Это может быть полезно) вам необходимо просмотреть действие. но анализ активности не будет полезен из-за последних стандартов безопасности, ссылка не будет полезна. Итак, попробуйте приведенный ниже случай.
Решение2 для случая 3: Если вы размещали код где-то на рабочем сервере, и если у вас есть доступ к серверу производства, чем подключение удаленного рабочего стола к производственному серверу и попытка для входа в систему один раз из браузера производственного сервера. Это добавит excpetioon для входа в google, и вам будет разрешен вход в систему из кода.
Но что, если у вас нет доступа к серверу производства. попробуйте решение 3
решение 3 для случая 3: Вы должны разрешить вход с другого часового пояса / ip для своей учетной записи google.
сделать это, следуя ссылке ] https://g.co/allowaccess и разрешить доступ, нажав кнопку продолжения.
И все. Ну вот. Теперь вы сможете входить в систему с любого компьютера и любым способом приложения в свою учетную запись google.
Что работало для меня, так это активировать опцию для менее безопасных приложений (я использую VB.NET)
Public Shared Sub enviaDB(ByRef body As String, ByRef file_location As String)
Dim mail As New MailMessage()
Dim SmtpServer As New SmtpClient("smtp.gmail.com")
mail.From = New MailAddress("from@gmail.com")
mail.[To].Add("to@gmail.com")
mail.Subject = "subject"
mail.Body = body
Dim attachment As System.Net.Mail.Attachment
attachment = New System.Net.Mail.Attachment(file_location)
mail.Attachments.Add(attachment)
SmtpServer.Port = 587
SmtpServer.Credentials = New System.Net.NetworkCredential("user", "password")
SmtpServer.EnableSsl = True
SmtpServer.Send(mail)
End Sub
. Войдите в свою учетную запись, а затем перейдите на страницу google.com. / настройки / безопасность / lesssecureapps
Комментарий Tomasz Madeyski - это то, что исправило мою проблему ... он говорит, что существует ошибка в SetDefaultCredential, он говорит:
«Проблема в том, что в SetDefaultCredentials установлен этот код: это. transport.Credentials = значение? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials: (ICredentialsByHost) null, что переопределяет учетные данные, установленные установщиком учетных данных. Для меня это выглядит как ошибка SmtpClient «
, если вы поместили smtpClient.UseDefaultCredentials = false
после набора учетных данных ... эта строка устанавливает нулевые эти учетные данные ...
Я столкнулся с той же проблемой. Это происходит, когда вы включаете двухэтапную аутентификацию (MFA). Просто отключите двухэтапную аутентификацию, и ваша проблема должна быть решена.
Ниже мой код. У меня также была такая же ошибка, но проблема в том, что я неправильно дал свой пароль. Нижеприведенный код будет работать отлично. Попробуйте
MailMessage mail = new MailMessage();
SmtpClient SmtpServer = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("fromaddress@gmail.com");
mail.To.Add("toaddress1@gmail.com");
mail.To.Add("toaddress2@gmail.com");
mail.Subject = "Password Recovery ";
mail.Body += " <html>";
mail.Body += "<body>";
mail.Body += "<table>";
mail.Body += "<tr>";
mail.Body += "<td>User Name : </td><td> HAi </td>";
mail.Body += "</tr>";
mail.Body += "<tr>";
mail.Body += "<td>Password : </td><td>aaaaaaaaaa</td>";
mail.Body += "</tr>";
mail.Body += "</table>";
mail.Body += "</body>";
mail.Body += "</html>";
mail.IsBodyHtml = true;
SmtpServer.Port = 587;
SmtpServer.Credentials = new System.Net.NetworkCredential("sendfrommailaddress.com", "password");
SmtpServer.EnableSsl = true;
SmtpServer.Send(mail);
Вы можете ссылаться на него в мой блог
Просто выполните шаг в электронной почте google и включите менее безопасные приложения.
У меня была та же проблема для приложения, развернутого в Microsoft Azure.
SmtpException: для SMTP-сервера требуется безопасное соединение или клиент не прошел аутентификацию. Ответ сервера: 5.5.1 Требуется аутентификация.
Сначала я утвердил все неизвестные устройства (некоторые ip-адреса, происходящие из Ирландии) на следующей странице (подписанный как пользователь gmail): https://security.google.com/settings/u/1/security/secureaccount
Я использовал следующие настройки для клиента:
var client = new SmtpClient("smtp.gmail.com"); client.Port = 587; client.EnableSsl = true; client.UseDefaultCredentials = false; client.Credentials = new NetworkCredential("my_user_name@gmail.com", "my_password");
Он начал работать только после того, как я установил следующее свойство на smtp-client:
client.TargetName = "STARTTLS/smtp.gmail.com";
У меня есть ранее работающий код, который теперь вызывает эту ошибку. Нет пароля. Нет необходимости конвертировать сообщение в base64. Оказывается, мне нужно сделать следующее:
Рабочий код
public static void SendEmail(string emailTo, string subject, string body)
{
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential("youremail@gmail.com", "secretpassword"),
EnableSsl = true
};
client.Send("youremail@gmail.com", emailTo, subject, body);
}
Отключение двухфакторной аутентификации
Установите «Разрешить менее безопасные приложения» на ON (на той же странице, необходимо для прокрутки вниз)
Я попробовал все предложения, найденные здесь, начиная с включения менее безопасных приложений, до пробного порта 587 ... ничего не получилось. Наконец, я просто прокомментировал строку UseDefaultCredentials = false
. Все работало, если я не касался этого логического.
Вы должны запретить менее безопасные приложения для доступа к своей учетной записи google.
:
Если вы используете gmail.
Наслаждайтесь ....
Я - приложение для Google для бизнеса, и я провожу последние пару часов, только имея дело с этим, даже после всех правильных настроек (smtp, port, enableSSL и т. д.). Вот что сработало для меня и веб-сайтов, которые бросали ошибку 5.5.1 при попытке отправить электронное письмо:
После этого мои электронные письма с сайта снова работали. Удачи!
Возможно, вам понадобится создать / сгенерировать определенный пароль APP из gmail. приложение или сценарий будут использовать этот новый пароль вместо обычного пароля. Ваш обычный пароль все равно будет работать для вас.
Вот что я сделал для него. Я все еще использовал одну и ту же учетную запись электронной почты, но должен был создать новый пароль для конкретного приложения.
https://support.google.com/accounts/answer/185833?hl=ru
В принципе вы можете сделать это здесь: https://security.google.com/settings/security/apppasswords
Проблема с безопасностью Gmail по умолчанию предотвращает доступ к вашей учетной записи электронной почты из пользовательских приложений. Вы можете настроить его, чтобы принять логин из вашего приложения.
После входа на ваш адрес электронной почты, ЩЕЛКНУТЬ ЗДЕСЬ
Это приведет вас к следующая страница
Проведя несколько часов сегодня, пробовав каждое решение, я все еще не смог пройти эту точную ошибку. Я использовал gmail много раз таким образом, поэтому я знал, что это что-то немое, но я ничего не исправил. Я, наконец, наткнулся на решение в моем случае, поэтому подумал, что буду делиться.
Во-первых, большинство ответов выше также требуется, но в моем случае это было простое упорядочение кода при создании класс SmtpClient.
В этом первом фрагменте кода ниже обратите внимание, где находится строка «Credentials = creds». Эта реализация будет генерировать ошибку, на которую ссылается этот вопрос, даже если у вас есть все, что было настроено правильно.
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
Credentials = creds,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
}
Однако, если вы переместите вызов установщика учетных данных в нижнюю часть, письмо будет отправлено без ошибок , Я не внес изменений в окружающий код ... то есть ... имя пользователя / пароль и т. Д. Очевидно, что либо EnableSSL, UseDefaultCredentials, либо метод DeliveryMethod зависят от установленных учетных данных ... Я не тестировал все, чтобы выяснить, какой из них был.
System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient
{
Host = Emailer.Host,
Port = Emailer.Port,
EnableSsl = Emailer.RequireSSL,
UseDefaultCredentials = false,
DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network,
Credentials = creds
}
Надеюсь, это поможет спасти кого-то еще некоторые головные боли в будущем.
UseDefaultCredentials
есть этот код: this.transport.Credentials = value ? (ICredentialsByHost) CredentialCache.DefaultNetworkCredentials : (ICredentialsByHost) null;
, который переопределяет credentials
, установленный установщиком Credentials
. Для меня это выглядит как ошибка SmtpClient
– Tomasz Madeyski
13 November 2017 в 15:21
Я действительно посмотрел на множество идей, единственное решение было таким образом (работает с разными провайдерами электронной почты):
try
{
ViewProgressbar("Try to connect mail-server...", progressBar1.Value = 20);
string host = dsProvider.Rows[y]["POP_hostOut"].ToString();
int port = int.Parse(dsProvider.Rows[y]["POP_portOut"].ToString()); //587
string[] email = von1.Split('@');
string userName = (dsProvider.Rows[y]["login"].ToString() == "email[0]@email[1]")? email[0]+"@"+email[1] : email[0];
string password = layer.getUserPassword(listSender.SelectedValue.ToString());
SmtpClient client = new SmtpClient(host, port);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
//A idea from MSDN but it not works. You got the "The server response was: 5.5.1 Authentication Required."
//System.Net.NetworkCredential myCreds = new System.Net.NetworkCredential(userName, password, host);
//System.Net.CredentialCache cache = new System.Net.CredentialCache();
//cache.Add(host, port, "NTLM", myCreds);
///cache.GetCredential(host, port, "NTLM"); //NTLM
client.Credentials = new System.Net.NetworkCredential(userName, password);
client.Host = host;
client.Port = port;
client.EnableSsl = true;
client.Send(message);
ViewProgressbar();
}
catch (SmtpException ex)...
попробуйте изменить хост, это новый, я получил эту конфигурацию mozilla thunderbird
Host = "smtp.googlemail.com"
, которая работает для меня