Назад | Перейти на главную страницу

Коннектор Exchange не отправляет сообщения во внешние домены

Я разработчик, пытающийся заставить мое приложение .Net отправлять электронные письма через наш сервер Exchange. Я не эксперт по обмену, так что уточню заранее !!

Мы настроили коннектор приема в Exchange, который имеет следующие свойства:

  1. Сеть: разрешает все IP-адреса через порт 25.

  2. Аутентификация: установлены флажки Безопасность транспортного уровня и Внешняя защита.

  3. Группы разрешений: установлены флажки для анонимных пользователей и серверов 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, ничего особенного с фильтром шлюза / спама и т. Д.

На соединителе получения (назовите его «Ретранслятор»):

  1. Убедитесь, что в поле «Получать почту от удаленных серверов с этими IP-адресами» указаны IP-адреса серверов, на которых вы собираетесь запускать это приложение.

  2. На кране "Аутентификация" единственное, что нужно проверить, - это "Внешняя защита".

  3. В группах разрешений единственное, что следует проверить, это «Серверы Exchange».

ПРИМЕЧАНИЕ: Если вы используете «Анонимный», как это выглядит в исходном сообщении, вам нужно будет запустить эту команду в оболочке Exchange, чтобы заставить этот тип коннектора реле работать:

Get-ReceiveConnector "NAMEOFCONNECTOR" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"

Затем снова попробуйте приложение с одного из серверов, IP-адрес которого находится в # 1 выше. Не пытайтесь использовать его непосредственно на самом сервере Exchange.

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