SmtpClient.Send отправит сообщение И время ожидания - PullRequest
3 голосов
/ 22 ноября 2011

Я обновляю старый код для интеграции с SQL. Я работаю в компании, которая иногда рассылает массовые электронные письма, что сильно замедляет работу почтового сервера. Мы хотим поместить электронные письма в базу данных, если они начнут накапливаться. При тестировании некоторых изменений в коде я заметил, что получу электронное письмо, и клиент все еще будет иметь тайм-аут. Это может вызвать проблемы, так как клиент затем установит сообщение электронной почты в очереди, и я получу его позже, когда другая служба попытается очистить базу данных.

SmtpClient emailClient = new SmtpClient(Settings.SmtpServer);
emailClient.Timeout = 100;

bool sent = false;
try
{
    using (Impersonate imp = DA.GetImpersonator())
    {
        emailClient.Send(message);
        sent = true;
    }
}
catch (SmtpException) { }
finally
{
    if (sent)
    {
        email.IsSent = true;
        DA.Save(email);
    }
}

Из 10 тестовых запусков, 9 по тайм-ауту, 1 успешный; Я получил 7 писем.

1 Ответ

4 голосов
/ 22 ноября 2011

Если посмотреть на спецификацию, тайм-аут только обещает, что метод вернется в течение этого времени, а не то, что отправка была остановлена.

Если вам нужно отправить несколько писем, рассмотрите возможность использования Метод SendAsync и подпишитесь на событие SendCompleted , чтобы определить успех / неудачу отправки электронной почты.

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