Как отправлять неотправленные письма

Работа на vs2010,asp.net C#. В последнее время я работаю на SMTP-сервере. С помощью SMTP-сервера мне нужно отправлять почту, я уже успешно сделал эту работу. Для отправки почты я использую приведенный ниже синтаксис.

public string PostEmail(string mailSubject, string mailBody)
{

    string deliveryStatusCode = "Ok";
    if (!string.IsNullOrEmpty(mailSubject) && !string.IsNullOrEmpty(gConfig.EmailTo))
    {
        MailMessage msg = new MailMessage();
        msg.To.Add(gConfig.EmailTo);
        msg.From = new MailAddress(gConfig.EmailTo);
        msg.Subject = mailSubject;
        msg.Body = mailBody;
        msg.IsBodyHtml = true;

        SmtpClient smtp = new SmtpClient(gConfig.SmtpHost, gConfig.SmtpPort);
        smtp.Credentials = new System.Net.NetworkCredential(gConfig.SmtpCredentials, gConfig.SmtpPassword);
        smtp.EnableSsl = true;
        smtp.DeliveryMethod = SmtpDeliveryMethod.Network;


        try
        {
            smtp.Send(msg);
        }
        catch (SmtpException smptpEx)
        {
            deliveryStatusCode = smptpEx.Message;
        }

    }
    else
    {
        deliveryStatusCode = "Invalid or null value entry.";
    }

    return deliveryStatusCode;
}

Теперь я сталкиваюсь с одной проблемой, по какой-то причине некоторые письма не могут быть отправлены, эти неотправленные письма должны быть отправлены, Как отправить эти неотправленные письма, Есть ли какой-либо механизм в SMTP для выполнения этой работы, или есть какой-то способ решить эту проблему. Спасибо заранее. Если есть какие-либо вопросы, пожалуйста, спросите.

2 ответа

Решение

Вы можете использовать каталог раскладки, если сервер smpt не работает, почта не отправляется. Когда он подключается к сети, он читает файлы в каталоге и начинает отправлять электронные письма.

Ваш код.NET просто принимает сообщение, генерирует и отправляет по электронной почте и отправляет его на SMTP-сервер. SMTP-сервер должен отправить любые неотправленные сообщения.

Вы можете делать то, что сказал @peer, и вместо отправки сообщения SMTP просто отбросьте сгенерированный файл в каталог раскладки SMTP, однако для этого требуется, чтобы ваш код.NET имел доступ к каталогу раскладки SMTP.

Другим вариантом может быть сохранение объекта электронной почты (либо в памяти, либо в виде сериализованного на диске), и если send выдает ошибку, повторите попытку позже.

В конечном счете, однако, вам действительно необходимо выяснить, почему электронная почта в первую очередь не проходит. Это часто проблема конфигурации, которая может быть уменьшена с небольшим исследованием. Посмотрите на сетевые подключения, время работы SMTP-сервера и, самое главное, аутентификацию.

Как я сказал в своем комментарии, сгенерированное электронное письмо делает очень много прыжков, прежде чем окончательно попасть в почтовый ящик конечных пользователей. Не вдаваясь в подробности о том, что является ошибкой, мы можем только бросать дротики и надеяться, что один из них приземлится.

Удачи
гнаться

Другие вопросы по тегам