Проверка, использует ли почтовый сервер SSL, не пытаясь отправить электронную почту - PullRequest
1 голос
/ 15 сентября 2010

Я использую C # и во время работы над подпрограммой отправки почты с использованием инструментов, доступных в .NET Framework, и суммировал две ситуации

  • Один почтовый сервер, для которого требуется SSL
  • Один почтовый сервер, который не поддерживает SSL

Так что, используя универсальный инструмент отправки почты, я заметил, что должен спросить пользователя, должен ли использоваться SSL, или определить его путем кодирования.

Когда я пытаюсь отправить электронное письмо, не используя SSL, через почтовый сервер, для которого требуется , я получаю исключение. Когда я пытаюсь отправить электронное письмо с использованием SSL через почтовый сервер, который его не поддерживает, я получаю исключение.

Делая это, должно быть легко проверить, должен ли я использовать это или нет.

Но я хочу более разумный способ сделать это. Я не нашел никакого способа сделать это. Есть ли один?

Ответы [ 3 ]

2 голосов
/ 11 мая 2011
bool supportsSSL = true;
Stream stream = new SslStream(client.GetStream(), false);

try
{
   ((SslStream)stream).AuthenticateAsClient("pop3.xyz.com");
}
catch (Exception e)
{
   supportsSSL =false;
}
2 голосов
/ 15 сентября 2010

Лично я не считаю, что ваш код должен «автоматически» определять, следует ли использовать SSL.

Когда служба электронной почты настроена пользователями, они должны сообщать вам, как она работает.и что нужно.

Вы можете увидеть это поведение по тому, как из коробки .NET SMTP, который вы должны сказать ему, как это.

Для дальнейшего этого некоторые службы имеютразные URL для SSL и не SSL, и, возможно, пользователи ДОЛЖНЫ использовать SSL, но вы можете позволить им случайно отправить неправильный путь.

1 голос
/ 15 сентября 2010

Похоже, у вас есть ответ.До тех пор, пока используемая вами библиотека SMTP делает правильные вещи при возникновении исключения, сначала попробуйте ssl, затем откройте не-ssl и обработайте этот случай ошибки (т. Е. Полный сбой), если это произойдет.думаю, что вы обеспокоены, потому что вы не знаете, что происходит под одеялом, когда выдается исключение, и если это так, я чувствую то же самое.Я не знаю, предоставляет ли ваш .net инструментарий средства, но вы должны быть в состоянии установить соединение с объектом типа соединения более низкого уровня, который позволяет вам проверить, возможно ли установить соединение ssl и проверить возвратценность вашей попытки, а затем решите, как действовать исходя из этого.

Это может быть больше проблем, чем стоит, потому что вам может понадобиться подключить функциональность SMTP к вашему новому типу подключения, если ваша библиотека SMTPне поддерживает использование уже установленного соединения.Это долгий путь, когда вы говорите, что вы, вероятно, справляетесь с ловлей исключения и пытаетесь снова.

Что касается ответа @ Mitchel, я бы сказал, что все в порядке, если он автоматичен, покаправильное уведомление сделано, и, конечно, контекст правильный.SMTP все еще довольно часто представляет собой простой текст, поэтому ожидание шифрования электронной почты довольно низкое.Учетные данные для входа - другое дело.Если это приложение, которое будет использовать конечный пользователь, вам, безусловно, следует убедиться, что они подключаются через SSL, если будут обмениваться учетными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...