3.876 messaggi dal 28 gennaio 2003
Buongiorno.
Vorrei crearmi una applicazione windows (uso vs2010) per fare questo.
1- ho una lista in memoria di 400 indirizzi
2- debbo inviare una diversa mail ad ogni indirizzo, a gruppi di 50, intervallando l'invio dei gruppi di 30 minuti.

Non chiedo naturalmente codice, ma dei consigli su come affrontare il problema.

Vorrei fare qualcosa di semplice, da eseguire nel server, magari di notte.

Ciao.

ps. il problema è come temporizzare, perchè l'invio di mail lo so fare!

Pietro
55 messaggi dal 09 febbraio 2005
ciao,
penso si possa fare con le operazioni pianificate di windows;

una cosa del genere:

Attivazione del tuo exe ogni giorno alle 20:00 con ripetizione ogni 30 minuti per una durata di 240 minuti.

HTH
Modificato da sspintux il 04 febbraio 2019 15:32 -
125 messaggi dal 05 novembre 2012
Ciao,

1- ho una lista in memoria di 400 indirizzi


cosa intendi?

Questo può rispecchiare la tua situazione:

List<string> addresses = GetEmailAddresses();
var skipCount = 0;
const int takeCount = 50;
TimeSpan period = TimeSpan.FromMinutes(30);

var timer = new System.Threading.Timer(e =>
{
    foreach (string address in addresses.Skip(skipCount).Take(takeCount))
    {
        SendEmailAddress(address);
    }

    skipCount += takeCount;
}, null, TimeSpan.Zero, period);

while (addresses.Count > skipCount) { }

timer.Dispose();


ciao
Modificato da scioCoder il 04 febbraio 2019 16:24 -

Alessio
3.876 messaggi dal 28 gennaio 2003
vi ringrazio delle risposte.
Questa la situazione.
Leggo, per esempio da un file excel, una lista di circa 400 indirizzi (sono nostri colleghi)
Io debbo spedire una mail personalizzata (sono tutte diverse) ad ogni collega.
Farlo a mano si può, ma onestamente è abbastanza noioso.
Farlo da programma risolve, però è possibile spedire solo circa 100 mail per volta, intervallate di mezz'ora.

1) carico in memoria gli indirizzi
2) spedisco le prime n mail
3) attendo mezz'ora
4) continuo con le altre n fino alla fine.

Pensavo di usare il controllo Timer, programmato per lanciare n mail ogni mezz'ora.
Può andare bene?

Pietro
125 messaggi dal 05 novembre 2012
hai letto il codice che ti ho postato?

Alessio
3.876 messaggi dal 28 gennaio 2003
Hai ragione.
Però debbo aspettare domani, così da provare con vs.
Ciao.

Pietro
11.272 messaggi dal 09 febbraio 2002
Contributi
Occhio qui, ci va uno sleep altrimenti si satura il core della CPU.
while (addresses.Count > skipCount) { }


Mettendo uno sleep di mezz'ora si potrebbe anche sostituire il timer.

Queue<string> addresses = GetEmailAddresses();
const int takeCount = 50;
TimeSpan period = TimeSpan.FromMinutes(30);

while (addresses.Any()) {
  string address = addresses.Dequeue();
  await SendEmail(address);
  if (addresses.Count % takeCount == 0) {
    await Task.Delay(period);
  }
}

Modificato da BrightSoul il 05 febbraio 2019 08:05 -

Enjoy learning and just keep making
125 messaggi dal 05 novembre 2012
Occhio qui, ci va uno sleep altrimenti si satura il core della CPU.


Chiedo venia alla CPU :-)
Moreno, una curiosità, basta un sleep simbolico di 1 millisecondo o cmq qualsiasi altra istruzione bloccante, corretto?

Mettendo uno sleep di mezz'ora si potrebbe anche sostituire il timer.


Bella la soluzione che hai proposto! Non ci ho pensato a gestire la cosa con una coda...d'altronde la classe non si sciacqua :-) :-) :-)

L'unica cosa, è rimasto un refuso

string address = addresses.Take(); => string address = addresses.Dequeue();


Buona serata

Alessio

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.