Ошибка unable to relay recipient in non accepted domain

  • Remove From My Forums
  • Вопрос

  • Добрый день!

    Установлен один сервер со всеми ролям Exchange 2016. При проверки получения писем из Интернета, выявил сообщение:

    550 5.7.54 SMTP; Unable to relay recipient in non-accepted domain 

    Вроде как и openrelay-а нет, но только на внешние домены. Решил проверить, что будет если попытаться отправить из Интернета на собственный домен. И письма проходят без авторизации! Это означает, что почтовые ящики организации могут
    заспамить используя собственный сервер.

    Как избежать такой ситуации ?

Ответы

  • Добрый день,

    Remove-ADPermission Имя_коннектора_приема_из_Интернета –user “NT AUTHORITYAnonymous Logon” –ExtendedRights ms-Exch-SMTP-Accept-Authoritative-Domain-Sender

    В 2016 вроде пофиксили, в 2013 это не работает, баг.

    Если сами отдельный коннектор получения не создавали, то имя коннектора будет «Default Frontend имя_сервера»

    Для русскоязычных продуктов меняете “NT AUTHORITYAnonymous Logon” на “NT AUTHORITYАнонимный вход”

    • Изменено

      5 декабря 2016 г. 14:05

    • Предложено в качестве ответа
      Vasilev VasilMicrosoft contingent staff
      20 декабря 2016 г. 12:04
    • Помечено в качестве ответа
      Vasilev VasilMicrosoft contingent staff
      28 декабря 2016 г. 6:34

Scenario: After standing up a new Exchange On-Premises Server, users are receiving the bounce back message with wording similar to the following:

For Email Admins: The message couldn’t be sent because it’s an attempt to relay a message to a recipient in a non-accepted domain (open relay) which isn’t allowed.

-or-

‘550 5.7.54 SMTP; Unable to relay recipient in non-accepted domain’

Solution: Make sure the Default Frontend Receive Connector is set to accept AnonymousUsers when connecting AND the ADPermission for AnonymousLogon is applied to the Receive Connector on the new server:

Set-ReceiveConnector “ExSrv1Default Frontend ExSrv1” -PermissionGroups AnonymousUsers

Get-ReceiveConnector “ExSrv1Default Frontend ExSrv1” | Add-ADPermission -User ‘NT AuthorityAnonymous Logon’ -ExtendedRights MS-Exch-SMTP-Accept-Any-Recipient

In case you trying to sent e-mails outside your company using anonymous authentication, you have to run the below commands from Exchange Management Shell.

  • Find your receive connector you want to use (ex. Default Frontend EXCHANGESERVER) and execute below commands:
Set-ReceiveConnector "EXCHANGESERVERDefault Frontend EXCHANGESERVER" -PermissionGroups AnonymousUsers
Get-ReceiveConnector "EXCHANGESERVERDefault Frontend EXCHANGESERVER" | Add-ADPermission -User 'NT AUTHORITYAnonymous Logon' -ExtendedRights MS-Exch-SMTP-Accept-Any-Recipient

Done!

При отправке писем с помощью данного метода, письмо отправляются только на доменные п/я. При попытке отправить на иные (Google, Mail.ru) выдаёт Exception

System.Security.Authentication.AuthenticationException: «Удаленный сертификат недействителен согласно результатам проверки подлинности.»

При подобных исключениях, советовали на callback сервера, передавать true (соглашаясь, что сертификат может быть не действительным).
При использовании этого кода (закоменчены несколько вариантов), возвращается

System.Net.Mail.SmtpFailedRecipientsException: «Не удалось отправить всем получателям.»

SmtpFailedRecipientException: Почтовый ящик недоступен. Отклик сервера: 5.7.54 SMTP; Unable to relay recipient in non-accepted domain

Если этот де код использовать для отправки с mail.ru или google, исключений не возникает.

Просьба подсказать, где имеются ошибки или иные варианты решения.
Заранее спасибо.

<pre>
using System;
using System.Globalization;
using System.Net;
using System.Net.Mail;
using System.Net.Security;
using System.Windows.Forms;
using Attachment = System.Net.Mail.Attachment;
using System.Threading;
using System.Security.Cryptography.X509Certificates;

namespace TestProg.DocSearchByParams.SystemMethods
{
    internal class MailSenderClass
    {
        private static void MailTo()
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU");
            var fromMailAddress = new MailAddress("mail@from.ru", "test");
            var adr = new string[] {"mail11@mail.ru", "mail22@gmail.com" };

            using (var smtp = new SmtpClient())
            {
                var message = new MailMessage
                {
                    From = fromMailAddress
                };

                foreach (var P in adr)
                {
                    message.To.Add(new MailAddress(P));
                }

                message.Subject = "Тема + неделя: "
                                  + DateTime.Now.AddDays(-7) + " - "
                                  + DateTime.Now;
                message.Body = "Тело";
                var attach = @"F:VS2017Документ от " + DateTime.Now.ToShortDateString() + ".xlsx";
                //message.Attachments.Add(new Attachment(attach));

                smtp.Host = "mail.esphere.ru";
                smtp.Port = 25;
                smtp.EnableSsl = true;
                smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtp.Timeout = 30000;
                smtp.UseDefaultCredentials = false;
                smtp.Credentials = new NetworkCredential(fromMailAddress.Address, "Password");


                /* Попытки избавиться от Exception "Сертификат не действителен" 
                 * ServicePointManager.ServerCertificateValidationCallback =
                 * delegate (object sender, X509Certificate certificate, X509Chain chain,
                 * SslPolicyErrors sslPolicyErrors)
                 *  { return true; };
                */

                /*
                 * System.Net.ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
                 *ServicePointManager.ServerCertificateValidationCallback =
                 *    delegate (object s, X509Certificate certificate,
                 *        X509Chain chain, SslPolicyErrors sslPolicyErrors)
                 *    { return true; };
                 */
                //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);

                smtp.Send(message);

                message.Dispose();
                smtp.Dispose();
            }
        }
      </pre>

1. Authentication is using 587 port, Anonymous connections is using 25 port, please make sure Telnet the port correctly.

By the way, for security reasons, we do not recommend modifying default connectors, I would suggest you create an anonymous relay connector to relay mails from this application.

https://docs.microsoft.com/en-us/exchange/mail-flow/connectors/allow-anonymous-relay Opens a new window

2. 

Very likely the SMTP provider (in your example company.com) has SPF setup. Which is a good and beautiful thing.

What is SPF? «Sender Policy Framework (SPF) is a simple email-validation system designed to detect email spoofing by providing a mechanism to allow receiving mail exchangers to check that incoming mail from a domain comes from a host authorized by that domain’s administrators»

You might need to contact the Administrator to allow the domain to use SMTP to send email.


Was this post helpful?
thumb_up
thumb_down

Понравилась статья? Поделить с друзьями:
  • Ошибка unarc dll вернул код ошибки 1 способы решения
  • Ошибка unable to recover from a kernel exception
  • Ошибка unarc dll в assassins creed black flag
  • Ошибка unable to read file
  • Ошибка unarc dll returned an error code 11