none
Envio de email (pegando dados do banco) automático em horário específico (o gatilho tem que ser o horário) RRS feed

  • Discussão Geral

  • Prezados colegas, bom dia!

    No sistema intranet que temos aqui, fiz um módulo de envio de email automático, toda vez que é feito um cadastro, e o email é enviado, tomei como base para fazer isto, nos exemplos seguintes:

    http://www.codeproject.com/Questions/321528/sending-email-to-gmail-from-asp-net

    http://codigofonte.uol.com.br/codigos/enviando-e-mail-com-aspnet-em-c

    No caso, fazer isso é bem tranquilo, pois no momento que é feito um cadastro, eu busco um outra dado no banco de dados e envio este dado para o email automaticamente, ou seja, o gatilho do envio do email é este botão.

    Mas agora estou pensando em fazer uma nova funcionalidade, por exemplo, quero enviar um email automático para alguns emails da empresa (um informativo sob o trabalho no dia da empresa) sempre num mesmo horário, por exemplo, às 23hs.

    Porém, desta vez o envio do email não teria um "gatilho" como um botão, provavelmente não teria ninguém acessando o sistema intranet às 23hs para algo em algum módulo servir de gatilho.

    Fazer a parte de envio de emails com o botão como gatilho para envio é fácil, mas essa minha outra necessidade não faço ideia nem como começar.

    Detalhe que eu necessito buscar dados de uma tabela do meu banco mysql, então seria um módulo como o que eu já tenho, só que ele deveria ser acionado automaticamente no horário de 23 hs sem que nem mesmo o sistema estivesse aberto em um browser.

    Seria como se fosse um .bat que estivesse agendado para rodar às 23hs, mas que fizesse as funcionalidades descrita, de buscar dados em uma tabela do BD e enviar esses dados como texto da mensagem e enviar o email neste horário específico.

    Alguém tem alguma ideia?

    Desde já obrigado.

    quarta-feira, 18 de junho de 2014 14:03

Todas as Respostas

  • Isso pode ser feito com variáveis persistentes na aplicação Web. Já fiz assim, mas não gosto do resultado pois consomem processamento a toa e se você reiniciar a aplicação Web pode parar um processo no meio (o mesmo quando acaba a vida útil da aplicação e o IIS reinicia ela sozinha).

    Tem como fazer, mas é muito complicado. Procure na internet sobre "System.Web.Hosting.IRegisteredObject".

    A solução que uso hoje é diferente. Eu adicionei um projeto a mais na minha solução, do tipo CONSOLE. Ele serve apenas para enviar e-mails. Da minha aplicação Web eu fiz a referência ao EXE.

    No windows (servidor) eu agendei uma tarefa para rodar toda segunda-feira, 09h. A tarefa é executar o EXE. Somente.

    Esse EXE tem apenas o procedimento de acessar o banco de dados, carregar os e-mails e as informações, escrever o e-mail e enviar. Desta forma, se o usuário apertar o botão na minha página, a aplicação Web chama o EXE e executa o envio (reenvio no caso), mas de qualquer forma o Windows mandará a mensagem toda segunda-feira como agendamento.

    quarta-feira, 18 de junho de 2014 17:10