2015-01-22 4 views
3

Надеюсь, этот вопрос имеет смысл. У меня есть код C#, который отправляет сообщение электронной почты с указанием имени пользователя, пароля и домена. Как узнать, какой тип аутентификации он использует?Какой тип аутентификации используется System.Net.Mail.SmtpClient при отправке писем?

Когда я посмотрел страницу MSDN для свойства SmtpClient.Credentials, он сказал, что если вы используете базовую проверку подлинности, то учетные данные отправляются как обычный текст. Является ли приведенный ниже код базовой аутентификацией? MSDN страница: https://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.credentials(v=vs.110).aspx

SmtpClient smtpClient = new SmtpClient(); 
NetworkCredential cred = new NetworkCredential("username", "password"); 
MailMessage message = new MailMessage(); 
MailAddress fromEmail = new MailAddress("[email protected]"); 

smtpClient.Host = "mail.mydomain.com"; 
smtpClient.UseDefaultCredentials = false; 
smtpClient.Credentials = cred; 

message.From = fromEmail; 
message.Subject = "my subject"; 

message.IsBodyHtml = true; 
message.Body = "hello world!"; 
message.To.Add("[email protected]"); 

smtpClient.Send(message); 
+0

Из того, что я вижу, SmtpClient требует, чтобы пароль был передан как обычный текст. Но рекомендуется хранить ваши настройки Smtp в файле web.config или app.config. http://stackoverflow.com/questions/12359445/how-to-secure-password-in-code-c-sharp-email-client. Я бы сказал, что это обычная аутентификация. –

ответ

1

Обычно SmtpClient будет выбрать все дни «лучший» метод проверки подлинности (сервер SMTP сообщит в ответ на команду EHLO). Поэтому мы не можем ответить, не зная, что сервер фактически поддерживает.

SmtpClient может выбрать один из следующих методов: переговоры, NTLM, Digest и Войти

Вот некоторые интересное чтение о том, как заставить SmtpClient использовать конкретный метод аутентификации (немного взломать иш кстати.): http://blogs.msdn.com/b/knom/archive/2008/04/16/hacking-system-net-mail-smtpclient.aspx

+0

Довольно полезно, но я не вижу, как команда EHLO, которую клиент отправляет на сервер, возвращает «лучший» доступный метод аутентификации. Согласно моим результатам поиска google, команда EHLO просто запрашивает, чтобы сервер отправил обратно список допустимых расширенных команд ESMTP, а не обязательно список методов проверки подлинности. Однако EHLO возвращает в своем списке «AUTH», позволяя клиенту знать, что они могут использовать эту команду для аутентификации, при условии, что клиент предоставляет логин, пароль и механизм аутентификации. Почти там, просто нужно заполнить эту последнюю деталь. –

+0

Ссылки на мой предыдущий комментарий: http: // www.samlogic.net/articles/smtp-commands-reference.htm, http://www.samlogic.net/articles/smtp-commands-reference-auth.htm –

+0

Ну, я не говорил об этом именно так. Ответ сервера на EHLO содержит список доступных методов проверки подлинности (см. RFC 4954 P3: http://tools.ietf.org/html/rfc4954#page-3). Я написал, что «SmtpClient» выберет «лучший» из этого списка. – pysco68

1

Этот метод будет использовать базовую аутентификацию и отправит код через незащищенный канал. Это происходит потому, что:

SmtpClient класс поддерживает только Service Extension SMTP для Secure SMTP через Transport Layer Security, как определено в RFC 3207. В этом режиме SMTP сессия начинается незашифрованном канала, то STARTTLS команда выдает клиенту сервер для переключения на безопасную связь с использованием SSL. См. RFC 3207, опубликованную Целевой группой Internet Engineering Task Force (IETF) для получения дополнительной информации.

Вы можете использовать SSL для таких ситуаций:

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

Также обратите внимание, что

Вы можете использовать ClientCertificates, чтобы определить, какие клиентские сертификаты должны использоваться для установления соединения SSL. ServerCertificateValidationCallback позволяет отклонить сертификат, предоставленный сервером SMTP. Свойство SecurityProtocol позволяет указать версию используемого протокола SSL.

+0

Я согласен с тем, что сообщение будет чистым, если не включить SSL, но, как правило, аутентификация по-прежнему может быть (более или менее) защищена, если пароль не отправлен в сообщении (об этом и был вопрос), если выбирается другой метод (как Negociate, NTLM или дайджест) – pysco68

+0

@ pysco68 Да, попробуем обновить. – VMAtm

 Смежные вопросы

  • Нет связанных вопросов^_^