#c# #wpf #smtp #mailkit
Вопрос:
Я использую рекомендуемый класс MailKit.Net.Smtp в своем приложении WPF C#, в котором пользователь(клиент) отправляет файл журнала из и в выделенный Gmail, нажав кнопку. Но когда я попробовал на компьютере друга, я получил исключение. (Я сталкиваюсь с этим и этим вопросом, но в моем случае я не знаю, как использовать его для C#)
Код, который я использую:
using (var client = new SmtpClient())
{
try
{
client.SslProtocols = SslProtocols.Ssl3 | SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12;
client.Connect("smtp.gmail.com", 465, true);
client.AuthenticationMechanisms.Remove("XOAUTH2");
client.Authenticate(login, password);
client.Send(message);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
throw;
}
finally
{
client.DisconnectAsync(true);
client.Dispose();
}
}
И вот исключение зарегистрировано:
Warning: 534: 5.7.14 <https://accounts.google.com/signin/continue?sarp=1amp;scc=1amp;plt=AKgnsbt
5.7.14 M0QLqwGEsymkDwo_w1PdtomM64NjeHlfRTxHSCRLrHD4dWryXDkqTLOTTdXp3j_w0jh5x
5.7.14 23oVaJfk24KAG9mFqOrGF1US1WDZx2PRou0xeN9x9s3iRl9Ash2T54rY_wMpsVtw>
5.7.14 Please log in via your web browser and then try again.
5.7.14 Learn more at
5.7.14 https://support.google.com/mail/answer/78754 t17sm1641881ljt.1 - gsmtp: MailKit.Security.AuthenticationException: 534: 5.7.14 <https://accounts.google.com/signin/continue?sarp=1amp;scc=1amp;plt=AKgnsbt
5.7.14 M0QLqwGEsymkDwo_w1PdtomM64NjeHlfRTxHSCRLrHD4dWryXDkqTLOTTdXp3j_w0jh5x
5.7.14 23oVaJfk24KAG9mFqOrGF1US1WDZx2PRou0xeN9x9s3iRl9Ash2T54rY_wMpsVtw>
5.7.14 Please log in via your web browser and then try again.
5.7.14 Learn more at
5.7.14 https://support.google.com/mail/answer/78754 t17sm1641881ljt.1 - gsmtp ---> MailKit.Net.Smtp.SmtpCommandException: 5.7.14 <https://accounts.google.com/signin/continue?sarp=1amp;scc=1amp;plt=AKgnsbt
5.7.14 M0QLqwGEsymkDwo_w1PdtomM64NjeHlfRTxHSCRLrHD4dWryXDkqTLOTTdXp3j_w0jh5x
5.7.14 23oVaJfk24KAG9mFqOrGF1US1WDZx2PRou0xeN9x9s3iRl9Ash2T54rY_wMpsVtw>
5.7.14 Please log in via your web browser and then try again.
5.7.14 Learn more at
5.7.14 https://support.google.com/mail/answer/78754 t17sm1641881ljt.1 - gsmtp
--- End of inner exception stack trace ---
at MailKit.Net.Smtp.SmtpClient.<AuthenticateAsync>d__87.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MailKit.Net.Smtp.SmtpClient.Authenticate(Encoding encoding, ICredentials credentials, CancellationToken cancellationToken)
at MailKit.MailService.Authenticate(Encoding encoding, String userName, String password, CancellationToken cancellationToken)
at Cont.MainWindow.SendEmailFromClient() 6/28/2021 9:40:27 PM
Теперь мое приложение WPF может быть запущено в другой части мира, и мне нужно получить файл журнала и исправить эту ошибку при отправке. Я уже включил «Разрешить менее безопасные приложения» и смог получать электронные письма со своего компьютера. Но почему-то этого недостаточно.
Ответ №1:
Сообщение об ошибке с сервера в журналах сообщает вам точно, что вам нужно сделать. Вам необходимо войти в Google Mail с компьютера, с которого вы подключаетесь к протоколу SMTP (в данном случае с компьютера вашего друга).
Это мера предосторожности Google, и она не позволит вам пройти аутентификацию на SMTP-сервере до тех пор, пока вы не войдете в систему через веб-браузер.
Возможно, вы сможете обойти эту проблему, используя пароль для конкретного приложения. Где-то в настройках почты Google вы можете сгенерировать пароли для конкретных приложений для этой цели.
Комментарии:
1. Спасибо вам за ответ. Но если я отправлю свое приложение клиенту, я не хочу, чтобы он входил в систему электронной почты через браузер. Логин и пароль встроены в код. На самом деле я нажал accounts.google.com/DisplayUnlockCaptcha с моего компьютера и позвонил своему другу, чтобы снова запустить программу, и она сработала. Поэтому он ничего не делал с помощью браузера, но я нажал на accounts.google.com/DisplayUnlockCaptcha с моего компьютера. Но я хотел бы устранить эту проблему для других клиентов.
2. Вот почему я предложил пароли для конкретных приложений-я считаю, что они позволяют обойти необходимость входа в систему через веб — браузер.
3. Спасибо, я постараюсь!