Почтовый ящик почтовый ящик.Net.Smtp.SmtpClient.Ошибка OnSenderNotAccepted

#c# #asp.net-core #mailkit

Вопрос:

У меня проблема, связанная с почтовым набором. В среде разработки он работает правильно и правильно отправляет электронные письма. У меня есть бета — версия системы, размещенная на моем домене (где находится сервер электронной почты-kumminui.specodit.pl) Я создал производственную среду в kumminui.pl (таким образом, часть .specodit была удалена). Прямо сейчас электронные письма не работают.

Ошибка № 1 (с портом 587 и именем хоста, равным имени сервера и спискам запуска):

     fail: API.Program[0]
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:       An error occurred during migration
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:       MailKit.Net.Smtp.SmtpCommandException: 146.59.19.44 is _my_ address
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:          at MailKit.Net.Smtp.SmtpClient.OnSenderNotAccepted(MimeMessage message, MailboxAddress mailbox, SmtpResponse response)
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:          at MailKit.Net.Smtp.SmtpClient.ProcessMailFromResponse(MimeMessage message, MailboxAddress mailbox, SmtpResponse response)
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:          at MailKit.Net.Smtp.SmtpClient.FlushCommandQueueAsync(MimeMessage message, MailboxAddress sender, IList`1 recipients, Boolean doAsync, Cancell
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:          at MailKit.Net.Smtp.SmtpClient.SendAsync(FormatOptions options, MimeMessage message, MailboxAddress sender, IList`1 recipients, Boolean doAsyn
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:          at StableManagement.Services.MailService.SendMessage(Notification notification) in /home/admin/web/kumminui.pl/App/StableManagement/Services/M
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:          at StableManagement.Data.ScheduleTask.ScheduledItemChangeState(DateTime scheduleFor) in /home/admin/web/kumminui.pl/App/StableManagement/Data/
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:          at StableManagement.Data.ScheduleTask.RecoverScheduledTasks() in /home/admin/web/kumminui.pl/App/StableManagement/Data/ScheduleTask.cs:line 48
Jul 27 10:08:08 specodit.pl dotnet-example[3445]:          at API.Program.Main(String[] args) in /home/admin/web/kumminui.pl/App/StableManagement/Program.cs:line 33
 

Я отправляю электронное письмо с помощью .NET Core и MailKit:

     private async Task<MimeMessage> PrepareMessage(AppUser user, string subject, BodyBuilder body)
    {
        var emailSMTPUserName = (await _settingsRepository.Get("emailSMTPUserName"))?.Value ?? "admin@kumminui.pl";
        MimeMessage message = new MimeMessage();

        MailboxAddress from = new MailboxAddress("Kumminui - Administracja", emailSMTPUserName);
        message.From.Add(from);

        MailboxAddress to = new MailboxAddress(user.FirstName   " "   user.LastName, user.Email);
        message.To.Add(to);

        message.Subject = subject;
        var path = "./Data/htmls/emails/assets/logo.png";
        var image = body.LinkedResources.Add(path);
        image.ContentId = MimeUtils.GenerateMessageId();
        image.ContentDisposition = new ContentDisposition() { Disposition = ContentDisposition.Inline };
        body.HtmlBody = body.HtmlBody.Replace("./assets/logo.png", string.Format("cid:{0}", image.ContentId));

        message.Body = body.ToMessageBody();

        return message;
    }
 

И Отправить:

     public async Task SendMessage(Notification notification)
    {
        MimeMessage message;
        using (var memory = new MemoryStream(notification.Message, false))
        {
            message = MimeMessage.Load(memory);
        }

        var emailSMTPHost = (await _settingsRepository.Get("emailSMTPHost"))?.Value;
        var emailSMTPPort = (await _settingsRepository.Get("emailSMTPPort"))?.Value;
        var emailSMTPUserName = (await _settingsRepository.Get("emailSMTPUserName"))?.Value;
        var emailSMTPPassword = (await _settingsRepository.Get("emailSMTPPassword"))?.Value;
        if (emailSMTPHost is not null
            amp;amp; emailSMTPPort is not null
            amp;amp; emailSMTPUserName is not null
            amp;amp; emailSMTPPassword is not null)
        {
            SmtpClient client = new SmtpClient();
            client.ServerCertificateValidationCallback = (s, c, h, e) => true;
            await client.ConnectAsync(emailSMTPHost, Int32.Parse(emailSMTPPort), SecureSocketOptions.Auto);
            await client.AuthenticateAsync(emailSMTPUserName, emailSMTPPassword);
            Console.WriteLine(client.IsAuthenticated);
            await client.SendAsync(message);
            await client.DisconnectAsync(true);
            client.Dispose();
        }
    }
 

Сообщение загружается из базы данных и отправляется пользователю в определенный момент. В чем может быть проблема с производственной средой? Эти приложения работают на одном компьютере, меняется только домен.

Журнал SMTP:

 Connected to smtps://specodit.pl:465/
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 220 specodit.pl ESMTP Exim 4.90_1 Ubuntu Tue, 27 Jul 2021 10:40:18  0000
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: C: EHLO [146.59.19.44]
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 250-specodit.pl Hello [146.59.19.44] [146.59.19.44]
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 250-SIZE 52428800
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 250-8BITMIME
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 250-PIPELINING
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 250-AUTH PLAIN LOGIN
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 250-CHUNKING
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 250 HELP
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: C: AUTH PLAIN AGFkbWluQGt1bW1pbnVpLnBsAGMxOU91bkNsN08=
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 235 Authentication succeeded
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: C: MAIL FROM:<admin@kumminui.pl> SIZE=51244 BODY=8BITMIME
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: C: RCPT TO:<biuro@specodit.pl>
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: S: 550 146.59.19.44 is _my_ address
Jul 27 10:40:18 specodit.pl dotnet-example[9875]: C: RSET
 

Ответ №1:

Ошибка, возвращаемая как часть RCPT TO команды, выглядит странно, учитывая, как сообщение об ошибке, по-видимому, относится к EHLO команде:

 C: EHLO [146.59.19.44]
 

SMTP-сервер отклоняет вас, потому что IP-адрес, на который претендует клиент, является тем же IP-адресом, что и сервер.

Вы можете переопределить это, установив client.LocalDomain свойство, которое будет использоваться в EHLO команде вместо автоматически обнаруженного IP-адреса. Вы можете попробовать установить для этого значение (например, «localhost»?) и посмотреть, решит ли это проблему.