Ciao a tutti, la domanda forse sarà banale, ma come si realizza un loop per uno script, il quale finchè si verifica una condizione questo continui ad eseguire detto script?

Grazie e buon Natale a tutti!

Marina di Camerota OnLine
VicenzaSoftware:Creazione siti web
Forum Tecnologie
3.082 messaggi dal 06 settembre 2002
Contributi | Blog
Ciao,

prima di dare suggerimenti sbagliati, puoi piegare melio cosa devi fare?
Byez
Stefano
.

Nothing can be born from hartred

Stefano (SM15455) Mostarda
http://blogs.aspitalia.com/SM15455
Rome Italy
SM15455 ha scritto:
Ciao,

prima di dare suggerimenti sbagliati, puoi piegare melio cosa devi fare?
Byez
Stefano
.

Certo, ho creato questo script che legge delle mail da un server mail, e dove ogni email presente dev'essere memorizzata in una banca dati e poi cancellata automaticamente, il mio blocco è proprio nel creare un loop (o ciclo while) dove il sistema ripete lo script finchè trova email nel server.

Marina di Camerota OnLine
VicenzaSoftware:Creazione siti web
Forum Tecnologie
Aggiornamento: Per adesso posto il codice che fin'ora ho realizzato.

    protected void btnAvvia_Click(object sender, EventArgs e)
    {
        using (POP3_Client c = new POP3_Client())
        {
            c.Connect("mail.xxx.com", 110);
            c.Authenticate("mail@xxxx.com", "xxxxxxxxxxx", false);

            POP3_MessagesInfo mInf = c.GetMessagesInfo();

            // Prendi il primo messaggio
            if (mInf.Count > 0)
            {
                byte[] messageData = c.GetMessage(mInf.Messages[0].MessageNumber);
                // Parse
                MimeParser m = new MimeParser(messageData);
                string from = m.From;
                string subject = m.Subject;

                // Valorizzo le label
                lblOggetto.Text = m.Subject.ToString();
                lblBody.Text = m.BodyHtml.ToString();
                
                //Creo la gestione ciclica
                int n =  mInf.Messages[0].MessageNumber;
                while (n > 0)
                {
                    //Salvo i dati nel database
                    BusinessClassDataContext dc = new BusinessClassDataContext();
                    table_mail mails = new table_mail { body = lblBody.Text, oggetto = lblOggetto.Text, mailFrom = from };
                    dc.table_mails.InsertOnSubmit(mails);
                    dc.SubmitChanges();
                    //GridView1.DataBind();
                    c.DeleteMessage(mInf.Messages[0].MessageNumber);

                    
                }
            }
        }
    }

Solo che il ciclo si impalla, salvando nel db solo il primo messaggio trovato, anche in due o tre copie...

Per quanto questa cosa possa essere semplice, io ci sto sbattendo la testa!

Marina di Camerota OnLine
VicenzaSoftware:Creazione siti web
Forum Tecnologie
A occhio e croce la 'n' viene impostata immediatamente prima del ciclo while e mai decrementata...quindi il ciclo while non terminerà mai...per come hai strutturato il loop dovresti reimpostare la 'n'
n =  mInf.Messages[0].MessageNumber;

all'interno del loop, subito dopo aver cancellato il messaggio che hai salvato in modo tale da aggiornare/decrementare la variabile con il numero di mail presenti sul server.

Gianluca
http://www.gianlucaesposito.it
Ciao Giaesp, infatti prendevo solo il primo valore. Alla fine ho modificato radicalmente il codice, optando per un ciclo for, che riporto per i posteri:
            // Ciclo i messaggi
            for (var i = 0; i < mInf.Messages.Length; i++)
            {
                byte[] messageData = c.GetMessage(mInf.Messages[i].MessageNumber);
                // Parse message
                MimeParser m = new MimeParser(messageData);
                string from = m.From;
                string subject = m.Subject;

                // Valorizzo le label
                lblOggetto.Text = m.Subject.ToString();
                lblBody.Text = m.BodyHtml.ToString();

                //Salvo i dati nel database
                BusinessClassDataContext dc = new BusinessClassDataContext();
                table_mail mails = new table_mail { body = lblBody.Text, oggetto = lblOggetto.Text, mailFrom = from };
                dc.table_mails.InsertOnSubmit(mails);
                dc.SubmitChanges();
                //GridView1.DataBind();
                c.DeleteMessage(mInf.Messages[i].MessageNumber);
            }

Grazie!
Modificato da ricardo78 il 27 dicembre 2011 00.32 -

Marina di Camerota OnLine
VicenzaSoftware:Creazione siti web
Forum Tecnologie

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.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC