none
Métodos EnviarEmail no Windows Services RRS feed

  • Pergunta

  • Oi boa tarde!

    Estou com uma simples dificuldade crie um método no windows Service que faz envio de e-mail automático porem não estou conseguindo chama-lo no meu método OnStar - esta dando erro. Eu criei esse método na mesma classe, porem quando chamo ele no método OnStart ele informa que o método é inválido...

    Se alguém puder me ajudar agradeço.....

    Obrigado!!! 

     private void EnviaEmail(string remetente, string nome, string assunto, string mensagem, bool copia)
            {
                 // Vamos utilizar o endereço de SMTP do e-mail que enviará mensagem alem da porta.
                SmtpClient cliente = new SmtpClient("smtp.gmail.com",587);
                MailMessage email = new MailMessage();
                cliente.EnableSsl = true;
                // Endereço do e-mail onde será entregue o email e "Sua Senha"
                cliente.Credentials = new NetworkCredential("MeuEmail@gmail.com","MinhaSenha");
                // Endereço do remetente, endereço de email e nome do remetente.
                email.From = new MailAddress(remetente, nome);
                //endereço de destino de email
                email.To.Add("DestinoEmail@Hotmail.com.br");
                // assunto do email
                email.Subject = assunto;
                //define se o corpo do email tera serviço de HTML
                email.IsBodyHtml = true;
                //Prioridade de envio, Alta, media e baixa;
                email.Priority = MailPriority.Normal;
                //Quem enviou o email
                email.Sender = email.From;
                //Define quando o destinatário sera notificado sobre o envio de email.
                email.DeliveryNotificationOptions = DeliveryNotificationOptions.OnSuccess;
                email.BodyEncoding = System.Text.Encoding.Default;
                if (copia)
                {
                    email.CC.Add(remetente);
                    email.Body = "(Em: " + System.DateTime.Now + " " + remetente + ")" + " Escreveu:" + mensagem;
                    cliente.Send(email);
                }
             throw new NotImplementedException();
            }

    quarta-feira, 17 de abril de 2013 18:55

Todas as Respostas

  • Se você deseja enviar um e-mail a cada requisição, Coloque essa logica no construtor da classe, desde que quem consumir este serviço 

    Use OnStart para lidar com todas inicialização do seu serviço. O construtor é chamado quando o executável do aplicativo é executado, e não quando o serviço é executado. O executável é executado antes OnStart. Quando você continuar, por exemplo, o construtor não é chamado novamente porque o SCM já detém o objeto na memória. Se OnStop libera recursos alocados no construtor e não em OnStart, os recursos necessários não seria criado pela segunda vez o serviço é chamado
    
    

    Se eu estiver errado me corrijam por favor.

    quarta-feira, 17 de abril de 2013 21:03
  • Thata

    Mostre como está chamando o seu método.


    Atenciosamente, Samuel dos Anjos

    quarta-feira, 17 de abril de 2013 22:32
  • Bom segue meu código, conforme solicitado...

    protected override void OnStart(string[] args)

            {

                EnviaEmail("parametro","parametro","parametro","parametro");

                

        ThreadStart Iniciar = new ThreadStart(VerificarDados);

                Thread Contar = new Thread(Iniciar);      

                //Startando minha aplicação.

                Contar.Start();

            }

     

    Obrigado por me auxiliar.....

    quinta-feira, 18 de abril de 2013 00:03
  • Thata,

    Se você observar no seu código acima, estão sendo passados apenas quatro parâmetro, sendo que o método exige cinco parâmetros:

    Ficando da seguinte forma:

    protected override void OnStart(string[] args)
    {
      EnviaEmail("parametro", "parametro", "parametro", "parametro", true);
                
      ThreadStart Iniciar = new ThreadStart(VerificarDados);
      Thread Contar = new Thread(Iniciar);      
      //Startando minha aplicação.
      Contar.Start();
    }

    No seu método abaixo:

    private void EnviaEmail(string remetente, string nome, string assunto, string mensagem, bool copia)
    {
    
    }

    Você pode deixar o parâmetro copia como opcional se quiser fazendo da seguinte forma:

    private void EnviaEmail(string remetente, string nome, string assunto, string mensagem, bool copia=false)

    {

    }

    Ou seja você não vai precisar informar uma cópia se não quiser, pois o valor padrão é false. Sendo assim você pode chamar esse método passando apenas os quatro parâmetros como está tentando no seu código.


    Atenciosamente, Samuel dos Anjos

    quinta-feira, 18 de abril de 2013 18:39