19 messaggi dal 17 gennaio 2011
Buonasera,
vorrei creare un serivio windows che ad una determinata ora del giorno invii una mail.
Creato un servizio su visual studio, messa la funzione di invio email in OnStart, installato il servio e all'avvio la mail parte senza problemi.
Adesso vorrei che questo servizio avviato ogni giorno alle 10.00 invii la mail.
Dove metto questo controllo? Sempre nella funzione OnStart? Oppure c'è un metodo del servizio specifico?

Grazie
10.265 messaggi dal 09 febbraio 2002
Contributi
Ciao Luigi,
dato che devi inviare la mail ad una specifica ora del giorno, potresti spostare il tuo codice in un'applicazione console che fai partire con un'operazione pianificata di Windows che si avvia ogni giorno alle 10.00.

In alternativa, se vuoi continuare ad usare un servizio per Windows, non puoi inviare la mail all'OnStart. Dovrai invece creare un timer in questo modo ed inviare la mail alla sua scadenza.

//Vogliamo inviare la mail alle 10
var time = TimeSpan.Parse("10:00");

//Quand'è la prossima esecuzione? oggi o domani?
var nextExecution = DateTime.Today.Add(time);
var now = DateTime.Now;
//Se l'orario è già trascorso, allora è domani
if (nextExecution < now)
    nextExecution = nextExecution.AddDays(1);

//Quanti millisecondi mancano alla prossima esecuzione?
var dueTime = Convert.ToInt32((nextExecution - now).TotalMilliseconds);

//Avviamo il timer
var timer = new System.Threading.Timer(
    callback: SendMail,
    state: null,
    dueTime: dueTime,
    period: 24*60*60*1000); //ripeti ogni giorno


Il metodo SendMail sarà una normale funzione fatta così in cui invierai la mail:
private static void SendMail(object state)
{
    //qui invia la mail
}


ciao,
Moreno
Modificato da BrightSoul il 07 settembre 2017 19.05 -

Enjoy learning and just keep making
19 messaggi dal 17 gennaio 2011
Buongiorno,
grazie mille per la risposta.
19 messaggi dal 17 gennaio 2011
Buongiorno,
realizzato il servizio installato sulla macchina, avvio il servizio alle 9:30 e giustamente alle 10:00 invia correttamente la mail.
Il problema è che il giorno dopo non va in automatico, devo sempre arrestare in avviare il servizio e cosi funziona.
112 messaggi dal 22 gennaio 2017
Contributi
Ciao Luigi, potresti riportare il codice presente nel metodo OnStart?
Oltre a quello già riportato da Moreno, hai scritto un ciclo o un timer di verifica?
Grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.