У меня есть поток, работающий в фоновом режиме, который будет спать и вытягивать данные из базы данных, когда что-то разбудит его. Я отправляю почтовому использованию использование приложений Google SmtpClient (код ниже).
Я хотел знать, существует ли что-нибудь я знать? Я планирую послать только одно электронное письмо за один раз (регистрация, или забыл электронную почту пароля). Я немного волнуюсь, что что-то может произойти как недопустимое электронное письмо, запирающее поток, потому что я не установил тайм-аут, или возможно приложения Google, оказывается, сделаны и то, чтобы заставлять приложение аварийно завершиться. Что я должен знать прочь? Я должен спросить, как я должен протестировать также?
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential(fromAddr, pass),
EnableSsl = true
};
MailMessage mail = new MailMessage(fromAddr, toAddr, subject, body);
mail.IsBodyHtml = true;
client.Send(mail);
Если вы используете IIS. Установите SMTP на свой сервер Отправить всю почту для localhost. Таким образом, если электронное письмо не проходит сразу, SMTP-сервер будет покинуть электронную почту вместо того, чтобы повесить приложение.
Вам нужно будет настроить SMTP-сервер для использования Gmail в качестве Smarthost. Если вам нужна дополнительная информация о том, как настроить это, дайте мне знать.
Я предполагаю, что это делается под ASP.NET, поскольку это один из тегов.
Насколько важен этот процесс? Это может быть хорошим кандидатом на службу Windows, а не часть выполнения ASP.NET, если позволяет вашей среде.
Вы упомянули, что вы вытащите данные из базы данных и отправьте электронное письмо. Ничего из этого не зависит от ASP.NET. Плюс сервис может дать вам лучшую резьбу, тестирование, регистрацию и асинхронные варианты.
Если вы хотите придерживаться ASP.NET Runtime, то вы также можете рассмотреть асинхронные страницы , если вы еще этого не сделали. Это позволит вам вырезать несколько почтовых потоков и дождаться результатов вашей главной страницы. Вы также можете установить значение тайм-аута, которое позволит вам отменить и вступать в застряние нити. Установка и обработка async Timeout позаботится о большем количестве ваших заболеваний, которые я подозреваю. Это решение, по крайней мере, потребуется ваша почта, отправив поток запроса на страницу.
Тестирование должно быть прямо вперед. Вы можете зарегистрировать отдельные учетные записи Google для тестирования.
Вы можете установить время ожидания
Свойство SMTPCT
, а затем обрабатывать любые выдающиеся исключения по телефону вызов
. Затем он не заблокирует нити, хотя вам придется справиться с причиной исключения, когда вы считаете соответствующие.
Добавьте в код команду try / catch, и все в порядке. В худшем случае в конечном итоге произойдет тайм-аут. Он не будет работать вечно, и Google не будет постоянно поддерживать соединение открытым (на самом деле SMTP довольно неумолим, когда дело доходит до тайм-аутов ...если вы будете медленными, это убьет соединение).
try
{
var client = new SmtpClient("smtp.gmail.com", 587)
{
Credentials = new NetworkCredential(fromAddr, pass),
EnableSsl = true
};
MailMessage mail = new MailMessage(fromAddr, toAddr, subject, body);
mail.IsBodyHtml = true;
client.Send(mail);
}
catch
{
// do something
}
Когда дело доходит до тестирования ... используйте другую учетную запись Gmail. Также вы можете проверить свой лимит отправляемых писем в день. Не знаю, какой у Gmail номер, но они не позволяют вам просто отправлять столько, сколько вы хотите.