Я пытаюсь отправлять письма через SmtpClient в ядре .net.По сути, я просто переношу старый код .net framework в ядро .net.В старой системе это делается следующим образом:
using (var smtpClient = new SmtpClient("smtp.xyz.de", 587))
{
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential("user", "password", "domain");
smtpClient.EnableSsl = true;
smtpClient.Send(mailMessage);
}
Этот код работает нормально.
Теперь я перенес этот код в ядро .net, как показано ниже:
using (var smtpClient = new SmtpClient("smtp.xyz.de", 587))
{
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new NetworkCredential("user", "password", "domain");
smtpClient.EnableSsl = true;
smtpClient.Send(mailMessage);
}
Первая проблема заключается в том, что я получаю сообщение об ошибке:
Входне является допустимой строкой Base-64, так как содержит не базовый 64-символ, более двух символов заполнения или недопустимый символ среди символов заполнения.
Трассировка стека:
at System.Convert.FromBase64CharPtr(Char* inputPtr, Int32 inputLength)
at System.Convert.FromBase64String(String s)
at System.Net.Mail.SmtpNegotiateAuthenticationModule.GetSecurityLayerOutgoingBlob(String challenge, NTAuthentication clientContext)
at System.Net.Mail.SmtpNegotiateAuthenticationModule.Authenticate(String challenge, NetworkCredential credential, Object sessionCookie, String spn, ChannelBinding channelBindingToken)
at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
Из-за этой ошибки я попытался преобразовать строки пользователя и пароля в Base64, как показано ниже:
using (var smtpClient = new SmtpClient("smtp.xyz.de", 587))
{
var userEncoded = Convert.ToBase64String(Encoding.UTF8.GetBytes("user"));
var passwordEncoded = convert.ToBase64String(Encoding.UTF8.GetBytes("password"));
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new NetworkCredential(userEncoded, passwordEncoded, "domain");
smtpClient.EnableSsl = true;
smtpClient.Send(mailMessage);
}
При этом я получаю еще одну ошибку:
SMTP-сервертребует безопасного соединения или клиент не прошел проверку подлинности.Ответ сервера: 5.7.1 Клиент не прошел проверку подлинности
Трассировка стека:
at System.Net.Mail.MailCommand.CheckResponse(SmtpStatusCode statusCode, String response)
at System.Net.Mail.MailCommand.Send(SmtpConnection conn, Byte[] command, MailAddress from, Boolean allowUnicode)
at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, Boolean allowUnicode, SmtpFailedRecipientException& exception)
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at MailTest.Program.ProgramStart() in C:\Repos\MailTest\MailTest\Program.cs:line 67
Создание объекта MailMessage:
mailMessage = new MailMessage("sender@xyz.com", "recipient@xyz.com", "subject", "body");
Может кто угодносообразить, что я делаю не так?Для меня код выглядит точно так же, за исключением преобразования в Base64.