public override CResultAErreur TraitementAvantSauvegarde(sc2i.data.CContexteDonnee contexte) { CResultAErreur result = base.TraitementAvantSauvegarde(contexte); if (!result) { return(result); } DataTable table = contexte.Tables[GetNomTable()]; if (table == null) { return(result); } ArrayList lst = new ArrayList(table.Rows); foreach (DataRow row in new ArrayList(table.Rows)) { if (row.RowState == DataRowState.Added) { C2iMail mail = new C2iMail(row); CTracabiliteMail traceMail = new CTracabiliteMail(contexte); if (!traceMail.ReadIfExists(new CFiltreData( CTracabiliteMail.c_champMessageUid + " = @1", mail.MessageId))) { traceMail.CreateNewInCurrentContexte(); traceMail.MessageUid = mail.MessageId; traceMail.DateReception = mail.DateReception; traceMail.CompteMail = mail.CompteMail; } } } return(result); }
/// <summary> /// Récupère les nouveaux Messaegs du serveur de Mails POP3 dont les informations de /// connextion sont indiqués dans le paramètre /// </summary> /// <param name="parametre">Parametres de connexion au serveur de mails POP3</param> /// <returns>Le Data du Result contient un liste de MailMessageEx</returns> public CResultAErreur RetrieveMails(CCompteMail compteMail) { CResultAErreur result = CResultAErreur.True; if (compteMail == null) { result.EmpileErreur("Erreur dans CRecepteurMail: compteMail est nul"); } m_compteMail = compteMail; m_compteMail.BeginEdit(); m_compteMail.DateDernierReleve = DateTime.Now; CParametreCompteMail parametre = compteMail.ParametreCompteMail; if (parametre == null) { result.EmpileErreur("Erreur dans CRecepteurMail: Le ¨Parametre de compte est nul"); return(result); } using (Pop3Client client = new Pop3Client()) { try { client.Connect(parametre.PopServer, parametre.PopPort, parametre.UseSsl); // Authenticate ourselves towards the server client.Authenticate(parametre.User, parametre.Password); // Get the number of messages in the inbox int messageCount = client.GetMessageCount(); // Messages are numbered in the interval: [1, messageCount] // Ergo: message numbers are 1-based. for (int i = 1; i <= messageCount; i++) { MessageHeader messageHead = client.GetMessageHeaders(i); Message messageRecu = null; CTracabiliteMail traceMail = new CTracabiliteMail(m_compteMail.ContexteDonnee); CFiltreData filtreIfExist = new CFiltreData( CTracabiliteMail.c_champMessageUid + " = @1 and " + CCompteMail.c_champId + " = @2 ", messageHead.MessageId, compteMail.Id); if (!traceMail.ReadIfExists(filtreIfExist)) { try { C2iMail mail = new C2iMail(compteMail.ContexteDonnee); mail.CreateNewInCurrentContexte(); mail.CompteMail = m_compteMail; if (parametre.HeaderOnly) { mail.FillFromHeader(messageHead); } else { messageRecu = client.GetMessage(i); mail.FillFromMessage(messageRecu); } } catch (Exception ex) { result.EmpileErreur(ex.Message); } } if (parametre.SupprimerDuServeur) { if (parametre.DelaiSuppression <= 0) { client.DeleteMessage(i); } else { DateTime dateMessage = messageHead.DateSent; TimeSpan dureeDeVie = DateTime.Now - dateMessage; if (dureeDeVie.Days >= parametre.DelaiSuppression) { client.DeleteMessage(i); } } } } } catch (Exception exception) { result.EmpileErreur(exception.Message); } finally { client.Disconnect(); } } if (!result) { m_compteMail.LastErreur = result.MessageErreur; } else { m_compteMail.LastErreur = I.T("Mails succesfully retrived|10000"); } result += m_compteMail.CommitEdit(); return(result); }