#c# #.net #smtp #smtpclient
#c# #.net #smtp #smtpclient
Вопрос:
Столкнулся со своеобразной проблемой. У меня есть SMTP-сервер, на котором мне нужно пройти аутентификацию для отправки почты. У нас есть служба C #, которая предназначена для автоматического выполнения этого, однако хост-сервер настроил SMTP-сервер так, чтобы он не разрешал ретрансляцию, когда клиент инициирует с помощью HELO против EHLO. Когда клиент использует EHLO, ретрансляция разрешена.
Есть ли способ поддерживать использование SmtpClient и отправлять EHLO против HELO?
Ответ по электронной почте на вопрос о передаче HELO / EHLO от поставщика хоста SMTP:
«По умолчанию наш сервер настроен на аутентификацию с помощью команд ehlo, а не helo. Он будет отвечать на запросы helo от хостов и доставлять почту локально, но не ретранслировать «.
Ошибка из приложения, отправленного разработчиком:
2011-09-14 14:32:17,764 ОШИБКА ISearchService — при вызове [AptitudeSolutions было выдано необработанное исключение.OnCore.Services.ServiceAdapter.Поиск.SearchServiceAdapter]. System.Net.Mail.SmtpException: серверу SMTP требуется безопасное соединение или клиент не прошел проверку подлинности. Ответ сервера был следующим: ретрансляция не разрешена (включите smtp-аутентификацию на вашем почтовом клиенте) в System.Net.Mail.RecipientCommand.Проверьте ответ (SmtpStatusCode StatusCode, строковый ответ) в System.Net.Mail.SmtpTransport.SendMail(отправитель почтового адреса, получатели почтового адреса, строка deliveryNotify, исключение SmtpFailedRecipientException amp; exception) в System.Net.Mail.SmtpClient.Отправить (сообщение почтового сообщения) в AptitudeSolutions.OnCore.BusinessProcesses.Сценарий.PublicRecordsNotification.Службы приложений.PublicRecordsNotificationEmailService.Отправляйте почту (строковое электронное письмо, строковая тема, тело строки) в AptitudeSolutions.OnCore.BusinessProcesses.Сценарий.PublicRecordsNotification.Службы приложений.PublicRecordsNotificationEmailService.Отправьте новый accountactivationemailto(строковое электронное письмо) в AptitudeSolutions.OnCore.BusinessProcesses.Сценарий.PublicRecordsNotification.Уровень обслуживания.PublicRecordsNotificationServiceLayer.RequestNewAccount(запрос NewAccountRequest) в AptitudeSolutions.OnCore.Services.ServiceAdapter.Поиск.SearchServiceAdapter.RequestNewNotificationAccount(запрос NewAccountRequest) при SyncInvokeRequestNewNotificationAccount(Объект, Объект[] , Объект[]) в системе.ServiceModel.Диспетчер.SyncMethod Invoker.Вызывать (экземпляр объекта, входные данные объекта [], объект [] и выходные данные) в AptitudeSolutions.Фреймворк.DataAccessBase.Utility.Wcf.serviceатрибуты.ExceptionLoggingOperationInvoker.Вызов (экземпляр объекта, входные данные объекта [], Объект [] и выходные данные)
Соответствующая часть файла конфигурации:
<system.net>
<mailSettings>
<smtp from="email@host.com">
<network host="mail.smtphost.com" port="25" userName="username" password="password" defaultCredentials="false" />
</smtp>
</mailSettings>
</system.net>
Некоторая информация была отредактирована в целях безопасности.
Комментарии:
1. Документы не на 100% ясны в этом, но мне кажется, что установка EnableSsl в true позволит добиться этого: msdn.microsoft.com/en-us/library/swas0fwc.aspx
2. .NET Framework 4. Я попробую включить ssl. Спасибо за ответы!
3. Выполняя некоторую декомпиляцию с помощью dotPeek, похоже, что EHLO используется всегда , основываясь на моем чтении
SmtpConnection.GetConnection()
. Вы уверены, что он не использует EHLO?4. @Coding Gorilla: Да, EHLO используется всегда. Он думает, что у OP есть что-то обратное и, конечно, неправильно настроено.
5. @ChrisLively Я бы также добавил, что кажется очень необычным включать ретрансляцию на основе команды EHLO, которая все равно оставит ваш SMTP-сервер открытым ретранслятором. Возможно, OP неправильно понимает, как настроен сервер. Более типично, что вам необходимо предоставить учетные данные для входа (что также требует EHLO), чтобы включить ретрансляцию.