none
Errore nella lettura di una webmail RRS feed

  • Domanda

  • Ciao a tutti, in una mia applicazione eseguo la lettura, salvataggio e sucessiva cancellazione di email nella webmail online. Sto riscontrando pero questo errore:

    Server returned:-ERR Your mailbox is already locked 
    Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
    
    Exception Details: System.Exception: Server returned:-ERR Your mailbox is already locked
    

    Solo che la cosa strana è che le mail vengono processate correttamente...

    Ho provato a guardare nelle impostazioni della webmail ma non ho trovato nulla fuori posto.

    Grazie...


    Ricardo Bagnati - www.vicenzasoftware.com

    giovedì 22 marzo 2012 20:09

Risposte

  • Questo errore capita se la casella di posta è POP3 e utenti diversi tentano di accedervi contemporaneamente. Tuttavia, per darti indicazioni più precise, dovresti farci vedere o quantomeno descrivere l'algoritmo che usi per accedere alla posta.

    Ad es.:

    • Se accedi alla casella ad intervalli di tempo ogni quanto lo fai? Perché se fai accessi troppo vicini la casella potrebbe risultare ancora bloccata dalla sessione precedente
    • Se si tratta di un'applicazione Web, controlla se ci possono essere più accessi alla casella da parte di sessioni differenti
    • Controlal se alla fine chiudi la connessione

    Infine, non capisco cosa intendi quando dici che le mail vengono processate correttamente... Tu ottieni un'eccezione, ma nonostante questo riesci a scaricare la posta? E allora quando viene lanciata l'eccezione?


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    • Contrassegnato come risposta Ricardo78 venerdì 23 marzo 2012 21:14
    giovedì 22 marzo 2012 21:10
    Postatore

Tutte le risposte

  • Questo errore capita se la casella di posta è POP3 e utenti diversi tentano di accedervi contemporaneamente. Tuttavia, per darti indicazioni più precise, dovresti farci vedere o quantomeno descrivere l'algoritmo che usi per accedere alla posta.

    Ad es.:

    • Se accedi alla casella ad intervalli di tempo ogni quanto lo fai? Perché se fai accessi troppo vicini la casella potrebbe risultare ancora bloccata dalla sessione precedente
    • Se si tratta di un'applicazione Web, controlla se ci possono essere più accessi alla casella da parte di sessioni differenti
    • Controlal se alla fine chiudi la connessione

    Infine, non capisco cosa intendi quando dici che le mail vengono processate correttamente... Tu ottieni un'eccezione, ma nonostante questo riesci a scaricare la posta? E allora quando viene lanciata l'eccezione?


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    • Contrassegnato come risposta Ricardo78 venerdì 23 marzo 2012 21:14
    giovedì 22 marzo 2012 21:10
    Postatore
  • Ciao Marco, grazie per la risposta.

    Infatti potrebbero esserci piu connessioni perchè utilizzo un ciclo for per fare la lettura:

    // Ciclo i messaggi
                for (var i = 0; i < mInf.Messages.Length; i++)
                {
                    byte[] messageData = c.GetMessage(mInf.Messages[i].MessageNumber);
                    
                    // Parse messaggio
                    MimeParser m = new MimeParser(messageData);
                    string MyFrom = m.From;
                    string subject = m.Subject;
                    string bodyHtml = m.BodyHtml;
                    string bodyText = m.BodyText; ;
                    string MyBody = null;
                    var serverDate = DateTime.UtcNow;
                    var italianDate = TimeZoneInfo.ConvertTimeFromUtc(serverDate, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"));
                    DateTime MyDate = italianDate;
                    DateTime ExpireDate = italianDate.AddYears(10);
    
                    //Stringa per prelevare il solo indirizzo mail (nel caso sia presente il nome del mittente questo viene eliminato, lasciando soltanto la mail)
                    MailAddress address = new MailAddress(MyFrom);
                    string mail = address.Address;
                    
                    //Costrutto che a seconda del tipo di mail (html o testo) filtra la risposta per l'inserimento.
                    if (MyBody == bodyHtml)
                    {
                        // Valorizzo le label
                        lblOggetto.Text = m.Subject;
                        lblBody.Text = bodyHtml;
                        string allegato = "nessun allegato";
    
                        //Ricavo la mail del mittente (cliente)
                        string UserMail = Membership.GetUserNameByEmail(mail);
    
                        //Salvo i dati nel database
                        BusinessClassDataContext dc = new BusinessClassDataContext();
                        table_mail mails = new table_mail { body = lblBody.Text, oggetto = lblOggetto.Text, mailFrom = mail, Username = UserMail, Allegato = allegato, Data_Salvataggio = MyDate, Data_Scadenza = ExpireDate };
                        dc.table_mails.InsertOnSubmit(mails);
                        dc.SubmitChanges();
                        //GridView1.DataBind();
                        c.DeleteMessage(mInf.Messages[i].MessageNumber);
                    }
    
                    else
                    {
                        // Valorizzo le label
                        lblOggetto.Text = m.Subject;
                        lblBody.Text = bodyText;
                        string preText = "<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN'><html><body>"; // Serve per aggiungere i tag html prima del corpo della mail
                        string postText = "</body></html>"; // Serve per chiudere i tag html aperti con la stringa preText.
                        string allegato = "nessun allegato";
    
                        //Ricavo la mail del mittente (cliente)
                        string UserMail = Membership.GetUserNameByEmail(mail);
    
                        //Salvo i dati nel database
                        BusinessClassDataContext dc = new BusinessClassDataContext();
                        table_mail mails = new table_mail { body = preText  + lblBody.Text + postText, oggetto = lblOggetto.Text, mailFrom = mail, Username = UserMail, Allegato = allegato, Data_Salvataggio = MyDate, Data_Scadenza = ExpireDate };
                        dc.table_mails.InsertOnSubmit(mails);
                        dc.SubmitChanges();
                        //GridView1.DataBind();
                        c.DeleteMessage(mInf.Messages[i].MessageNumber);
                    }
                }
    
     
    


    Ricardo Bagnati - www.vicenzasoftware.com

    venerdì 23 marzo 2012 17:25
  • Che cos'è mInf? Che cosa fa il metodo c.GetMessages?

    Poi, non hai risposto alla mia domanda, che ti riporto qui:

    Infine, non capisco cosa intendi quando dici che le mail vengono processate correttamente... Tu ottieni un'eccezione, ma nonostante questo riesci a scaricare la posta? E allora quando viene lanciata l'eccezione?


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    venerdì 23 marzo 2012 17:32
    Postatore
  • Che cos'è mInf? Che cosa fa il metodo c.GetMessages?

    Hai ragione, per semplicità ho omesso la parte che riguarda la classe che utilizzo per leggere le mail. Ho utilizzato una libreria che trovi a questo link: Lumisoft su codeproject .

    Poi, non hai risposto alla mia domanda, che ti riporto qui:

    Infine, non capisco cosa intendi quando dici che le mail vengono processate correttamente... Tu ottieni un'eccezione, ma nonostante questo riesci a scaricare la posta? E allora quando viene lanciata l'eccezione?


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    Scusa, piccola dimenticanza mia. Infatti è come hai intuito tu, ottengo l'eccezione ma se torno indietro ed aggiorno la pagina mi trovo i dati nuovi salvati.

    Ricardo Bagnati - www.vicenzasoftware.com

    venerdì 23 marzo 2012 18:24
  • Ci siamo quasi... Ma ancora non mi hai detto qual è la riga che ti da l'errore :-) Forse è l'ultima iterazione del ciclo? Visto che dici che comunque i messaggi li ritrovi tutti.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    venerdì 23 marzo 2012 18:32
    Postatore
  • Si scusami ma oggi ho mal di testa :-\

    La riga che da errore è quella dell'autenticazione, dove in pratica ho inserito username e password per accedere alla webmail.


    Ricardo Bagnati - www.vicenzasoftware.com

    venerdì 23 marzo 2012 18:57
  • Perdonami, ma la parte di autenticazione non l'hai mostrata... Tu hai mostrato il codice in cui cicli tra i messaggi.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    venerdì 23 marzo 2012 19:17
    Postatore
  • Si in realtà non c'è molto in tal senso da mostrare poichè sono solo due righette semplici:

    c.Connect("xxx.mails-storage.net", 110);
                c.Authenticate("xxx@mails-storage.net", "xxxx", false);

    Dove le 2 variabili fanno parte sempre di quella libreria che ti ho linkato su codeproject...

    Ricardo Bagnati - www.vicenzasoftware.com

    venerdì 23 marzo 2012 19:26
  • Ma queste righe sono all'interno di un ciclo?

    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    venerdì 23 marzo 2012 19:29
    Postatore
  • Grazie al tuo suggerimento ho trovato l'errore, infatti avevo un ciclo for e altri punti nel codice in cui richiamavo la connessione, mandando di fatto in tilt l'applicazione... è bastato chiudere la connessione!

    Grazie mille, il tuo suggerimento mi è servito a capirlo! ;-)


    Ricardo Bagnati - www.vicenzasoftware.com

    venerdì 23 marzo 2012 21:13
  • Di niente, sono felice di averti indirizzato verso la soluzione!

    Alla prossima.


    Marco Minerva [MCPD]
    Blog: http://blogs.ugidotnet.org/marcom
    Twitter: @marcominerva

    venerdì 23 marzo 2012 21:16
    Postatore