Что я должен знать об отправке электронных писем в фоновом потоке? ASP.NET

У меня есть поток, работающий в фоновом режиме, который будет спать и вытягивать данные из базы данных, когда что-то разбудит его. Я отправляю почтовому использованию использование приложений 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);
7
задан 21 January 2010 в 03:07
поделиться

4 ответа

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

Вам нужно будет настроить SMTP-сервер для использования Gmail в качестве Smarthost. Если вам нужна дополнительная информация о том, как настроить это, дайте мне знать.

3
ответ дан 7 December 2019 в 10:02
поделиться

Я предполагаю, что это делается под ASP.NET, поскольку это один из тегов.

Насколько важен этот процесс? Это может быть хорошим кандидатом на службу Windows, а не часть выполнения ASP.NET, если позволяет вашей среде.

Вы упомянули, что вы вытащите данные из базы данных и отправьте электронное письмо. Ничего из этого не зависит от ASP.NET. Плюс сервис может дать вам лучшую резьбу, тестирование, регистрацию и асинхронные варианты.

Если вы хотите придерживаться ASP.NET Runtime, то вы также можете рассмотреть асинхронные страницы , если вы еще этого не сделали. Это позволит вам вырезать несколько почтовых потоков и дождаться результатов вашей главной страницы. Вы также можете установить значение тайм-аута, которое позволит вам отменить и вступать в застряние нити. Установка и обработка async Timeout позаботится о большем количестве ваших заболеваний, которые я подозреваю. Это решение, по крайней мере, потребуется ваша почта, отправив поток запроса на страницу.

Тестирование должно быть прямо вперед. Вы можете зарегистрировать отдельные учетные записи Google для тестирования.

1
ответ дан 7 December 2019 в 10:02
поделиться

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

0
ответ дан 7 December 2019 в 10:02
поделиться

Добавьте в код команду 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 номер, но они не позволяют вам просто отправлять столько, сколько вы хотите.

2
ответ дан 7 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: