Я разработчик, пытающийся заставить мое приложение .Net отправлять электронные письма через наш сервер Exchange. Я не эксперт по обмену, так что уточню заранее !!
Мы настроили коннектор приема в Exchange, который имеет следующие свойства:
Сеть: разрешает все IP-адреса через порт 25.
Аутентификация: установлены флажки Безопасность транспортного уровня и Внешняя защита.
Группы разрешений: установлены флажки для анонимных пользователей и серверов Exchange.
Но когда я запускаю этот оператор Powershell прямо на нашем сервере Exchange, он работает, когда я отправляю на адрес локального домена, но когда я пытаюсь отправить его на удаленный домен, это не удается.
РАБОТАЕТ:
C:\Windows\system32>Send-Mailmessage -To MYLOCALADDRESS@OURDOMAIN.com -From MYLOCALADDRESS@OURDOMAIN.com -Subject testing -Body testing -SmtpServer OURSERVER
(Кстати: мое значение для OURSERVER = boxname.domainname.local. Это то же самое полное имя, которое отображается в нашей командной консоли Exchange, когда я ее запускаю).
НЕИСПРАВНОСТИ:
C:\Windows\system32>Send-Mailmessage -To MYPERSONALADDRESS@gmail.com -From MYLOCALADDRESS@OURDOMAIN.com -Subject testing -Body testing -SmtpServer OURSERVER
Send-MailMessage: почтовый ящик недоступен. Ответ сервера был: 5.7.1 Невозможно ретранслировать В строке: 1 символ: 17 + Отправить-Mailmessage <<<< -To MYPERSONALADDRESS@gmail.com -From MYLOCALADDRESS@OURDOMAIN.com -Subject testing -Body himom -SmtpServer FTI- EX + CategoryInfo: InvalidOperation: (System.Net.Mail.SmtpClient: SmtpClient) [Send-MailMessage], SmtpFailed RecipientException + FullyQualifiedErrorId: SmtpException, Microsoft.PowerShell.Commands.SendMailMessage
РЕДАКТИРОВАТЬ: Из совета @TheCleaner я запустил Add-ADPermission для реле, и это не помогло;
[PS] C:\Windows\system32>Get-ReceiveConnector "Allowed Relay" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"
Identity User Deny Inherited
-------- ---- ---- ---------
FTI-EX\Allowed Relay NT AUTHORITY\ANON... False False
Спасибо за помощь. отметка
Вам следует настроить коннектор приема, работающий на нестандартном порту (возможно, 2525), и ограничить его приемом только IP-адресов серверов, которые, как вы знаете, разрешены для отправки. Создайте соединитель, в котором ничего не отмечено в разделе «Проверка подлинности» и «Анонимные пользователи» отмечены для групп разрешений.
После этого вам нужно будет запустить следующую команду в PS, поскольку Exchange по умолчанию блокирует анонимную ретрансляцию на любом соединителе приема.
Get-ReceiveConnector “Receive Connector Name” | Add-ADPermission -User “NT AUTHORITY\ANONYMOUS LOGON” -ExtendedRights “Ms-Exch-SMTP-Accept-Any-Recipient”
Я только что протестировал это на своем собственном сервере обмена, и мне удалось отправить как в Gmail, так и в свой собственный домен, отправив из домена обмена, а также из поддельного домена.
Также добавьте -port 2525
аргумент в ваш сценарий PS.
Существуют способы ретрансляции во внешний мир без аутентификации из вашей внутренней сети (путем создания нового коннектора SMTP на вашем краю или концентраторе).
В большинстве случаев вам лучше настроить аутентификацию, если вы можете это сделать. Это хорошо работает, если вы отправляете только несколько выделенных процессов / скриптов и т. Д.
Если вы хотите иметь ретрансляцию без проверки подлинности, создайте новое правило коннектора приема концентратора. Для этого (при условии, что один сервер Exchange выполняет все роли Exchange):
Конфигурация сервера -> Транспортный сервер-концентратор
Используйте все доступные IP-адреса для получения и введите любые удаленные хосты, которые будут ретранслировать, в настройку «получать почту с удаленного сервера».
Вам, вероятно, не понадобится какой-либо из методов аутентификации (возможно, TLS), а группа разрешений должна быть установлена на анонимную.
Я предполагаю, что есть просто сервер Exchange, ничего особенного с фильтром шлюза / спама и т. Д.
На соединителе получения (назовите его «Ретранслятор»):
Убедитесь, что в поле «Получать почту от удаленных серверов с этими IP-адресами» указаны IP-адреса серверов, на которых вы собираетесь запускать это приложение.
На кране "Аутентификация" единственное, что нужно проверить, - это "Внешняя защита".
В группах разрешений единственное, что следует проверить, это «Серверы Exchange».
ПРИМЕЧАНИЕ: Если вы используете «Анонимный», как это выглядит в исходном сообщении, вам нужно будет запустить эту команду в оболочке Exchange, чтобы заставить этот тип коннектора реле работать:
Get-ReceiveConnector "NAMEOFCONNECTOR" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"
Затем снова попробуйте приложение с одного из серверов, IP-адрес которого находится в # 1 выше. Не пытайтесь использовать его непосредственно на самом сервере Exchange.
Это может быть скорее обходным путем, но указание учетных данных в вашем скрипте должно позволить вам отправлять сообщения извне без каких-либо изменений конфигурации на стороне Exchange.