ARC-Authentication-Results permerror отправка электронной почты с c # - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь разослать платежные ведомости всем нашим сотрудникам, но во многих аккаунтах Gmail электронная почта задерживается или блокируется.

Я проверил учетную запись GSuite и получил письмо, но вв представлении «оригинальная электронная почта» электронной почты отображаются следующие строки:

 ARC-Authentication-Results: i=1; mx.google.com;
 spf=permerror (google.com: permanent error in processing during lookup
 of no-reply@our-domain.com.au: mail.optusnet.com.au not found)
 smtp.mailfrom=no-reply@our-domain.com.au

и

 Received-SPF: permerror (google.com: permanent error in processing during
 lookup of no-reply@our-domain.com.au: mail.optusnet.com.au not found)
 client-ip=000.000.00.000;

У нас есть действительная запись SPF, позволяющая отправлять электронные письма с нашего сервера через O365.

Вот класс, который я использую для отправки электронных писем.Я использую цикл Parallel.ForEach для отправки электронных писем.Максимальное количество потоков - 3 или 4.

public class EmailService : IDisposable
{
    public const string DefaultFromAddress = "no-reply@our-domain.com.au";
    private const string Office365Host = "smtp.office365.com";
    private const int Office365Port = 587;
    private const string Office365UserName = "O365_App_UserName";
    private const string Office365Password = @"--Password--";

    //private readonly SmtpClient _smtpClient;
    private SmtpClient _smtpClient;
    private readonly Logger _logger;

    public EmailService()
    {
        _logger = LogManager.GetCurrentClassLogger();
        _smtpClient = new SmtpClient
        {
            Host = Office365Host,
            Port = Office365Port,
            UseDefaultCredentials = false,
            Credentials = new NetworkCredential(Office365UserName, Office365Password),
            DeliveryMethod = SmtpDeliveryMethod.Network,
            EnableSsl = true,
            TargetName = "STARTTLS/smtp.office365.com"
        };
    }

    public bool SendEmail(MailMessage message)
    {
        try
        {
            _smtpClient.Send(message);
        }
        catch (Exception ex)
        {
            _logger.Error(ex, $"Failed to send email: from: {message.From.Address}, to:{message.To.First()}. more details:{ex.InnerException}");
            return false;
        }
        return true;
    }

    public void Dispose()
    {
        _smtpClient.Dispose();
    }
}

Вот код в цикле, который отправляет составленные сообщения:

using (EmailService emailService = new EmailService())
{
  employee.EmailSent = emailService.SendEmail(mailMessage);
}

Что мне здесь не хватает?Нужно ли нам что-то делать с записями SPF для mail.optusnet.com.au?

Будем весьма благодарны за любые другие предложения.Спасибо

1 Ответ

0 голосов
/ 13 февраля 2019

Я нашел решение своей проблемы.Оказывается, после копания и тестирования, в моем коде не было ничего плохого, это было связано с записями DNS.Записи типа SPF были заменены записями типа TXT.Похоже, Google более безопасен и проверяет тип SPF, но не на каждом домене, указанном в этой записи.Когда я удалил их из записи, появился новый домен.Затем мы полностью удалили тип SPF, и ошибка исчезла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...