Mailkit.SMTP как правильно установить/передать значение SecureSocketOptions [РЕШЕНО]

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Доброй ночи форумчане. Для тестов потребовалось собрать небольшой smtp sender на базе Mime/MailKit. Сами готовые DLL честно взял на одной из веток данного форума.
Не могу сообразить как передать значение SecureSocketOptions в код ниже

C#:
      string login = "";
      string pass = "";
      int port = 587;
      bool SSL = false;
      var server = "";
      string email = "";
      string bcc = "";
      string bcc2 = "";
      var subject = "";
      var message = "";
      var emailMessage = new MimeMessage();
      emailMessage.From.Add(new MailboxAddress("Notification",login));
      emailMessage.To.Add(new MailboxAddress("", email));
      emailMessage.Bcc.Add(new MailboxAddress( bcc,bcc2));
      emailMessage.Subject = subject;
      emailMessage.Body = new TextPart(MimeKit.Text.TextFormat.Html)
            {
                Text = message
            };
      using (var client = new SmtpClient())
            {
        try
                    {
               client.Connect(server, port, SSL);
               client.Authenticate(login, pass);
               client.Send(emailMessage);
                    }
                catch (Exception e)
                    {
                    var log = e.ToString();
                    project.SendInfoToLog(login + "LOGGER" + " | " +log);
                    }
                    client.Disconnect(true);
            }
Код работает и отправляет письма. Где необходимо исходя из входных данных серверов отправителей, он меняет SSL на true либо false.
Но возникла следующая проблема. Некоторые сервера для аутентификации требуют задать TLS11/TLS12
В документации по MailKit нашел решение которое позволяет программе самостоятельно определять транспортный протокол
C#:
client.Connect(mailService.Host, mailService.Port, SecureSocketOptions.Auto);
В указанном выше коде это соответствует строке 24 только в ней отсутствует SecureSocketOptions
C#:
client.Connect(server, port, SSL);
Пытался подставить
C#:
client.Connect(server, port, SecureSocketOptions.Auto);
но это к сожалению не срабатывает, мейкер ругается на то что не понимает этого значения SecureSocketOptions.Auto
попытался так
C#:
var SecureSocketOptions = Auto; // в различных вариантах
client.Connect(server, port, SecureSocketOptions);
но все равно результата нет.
Подскажите, как правильно реализовать это в строке.
 
Последнее редактирование:

Carty

Client
Регистрация
16.06.2021
Сообщения
39
Благодарностей
66
Баллы
18
  • Спасибо
Реакции: DevOps

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
C#:
client.SslProtocols = SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13;
для уточнения...
C#:
objClient.SslProtocols = System.Security.Authentication.SslProtocols.Tls | System.Security.Authentication.SslProtocols.Tls11 | System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13
 
  • Спасибо
Реакции: DevOps

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
client.Connect(server, port, MailKit.Security.SecureSocketOptions.Auto);
Сработало, спасибо!
А вот это так не сработало :(
C#:
objClient.SslProtocols = System.Security.Authentication.SslProtocols.Tls | System.Security.Authentication.SslProtocols.Tls11 | System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13;
Ошибка в действии "CS0103" "The name 'objClient' does not exist in the current context".
А так не ругается
C#:
client.SslProtocols = SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12 | SslProtocols.Tls13;
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
А вот это так не сработало :(
C#:
objClient.SslProtocols = System.Security.Authentication.SslProtocols.Tls | System.Security.Authentication.SslProtocols.Tls11 | System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13;
Ошибка в действии "CS0103" "The name 'objClient' does not exist in the current context". [Строка: 730; Cтолбец: 5]
ну так это же мой объект... у тебя другой ... client
это вообще для примера, я Auto использую.
 
  • Спасибо
Реакции: DevOps

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
ну так это же мой объект... у тебя другой ... client
это вообще для примера, я Auto использую.
Не подскажете как исключить из лога (Exception) трассировку сообщений из внутреннего стека?
Только ответ сервера и все (правда возможно я в настройках мейкера что то включил - но не уверен что в этом причина)
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113
Не подскажете как исключить из лога (Exception) трассировку сообщений из внутреннего стека?
Только ответ сервера и все (правда возможно я в настройках мейкера что то включил - но не уверен что в этом причина)
эммм... про что речь ? ну там скрин вывода лишнего не помешал бы, для понимания сути....
 

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
эммм... про что речь ? ну там скрин вывода лишнего не помешал бы, для понимания сути....
При исключении, этим кодом
C#:
catch (Exception e)
                    {
                    var log = e.ToString();
                    project.SendInfoToLog(login + "LOGGER" + " | " +log);
                    }
выводится такой лог ошибки
[email protected] | MailKit.Security.AuthenticationException: 535: 5.7.0 Authentication rejected ---> MailKit.Net.Smtp.SmtpCommandException: 5.7.0 Authentication rejected
--- Конец трассировки внутреннего стека исключений ---
в MailKit.Net.Smtp.SmtpClient.<AuthenticateAsync>d__65.MoveNext()
--- Конец трассировка стека из предыдущего расположения, где возникло исключение ---
в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
в MailKit.Net.Smtp.SmtpClient.Authenticate(Encoding encoding, ICredentials credentials, CancellationToken cancellationToken)
в MailKit.MailService.Authenticate(Encoding encoding, String userName, String password, CancellationToken cancellationToken)
в MailKit.MailService.Authenticate(String userName, String password, CancellationToken cancellationToken)
в ZennoLab.OwnCode.a56384da3bf6aaf4f3ac26c1e(IZennoPosterProjectModel project, Instance instance

_____________
При каждой ошибке такой лог
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 691
Баллы
113

DevOps

Client
Регистрация
30.11.2020
Сообщения
496
Благодарностей
314
Баллы
63
Последнее редактирование:

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)