示例#1
0
        /// <summary>
        /// Verifica se la mail scaricata utilizzando l'hash md5 dell'intero Eml se questa è già presente nel db, e quindi non deve essere ri-elaborata.
        /// Allo stesso tempo aggiorna il campo Header Hash calcolato dalla nuova versione della gestione pec nella tabella PecMail per
        /// poter individuare da subito utilizzando il solo header se si tratta di una mail già processata
        /// Se la mail esiste lo status viene già portata ad Archivied affinche venga gestito la release con evenutale cancellazione e backup della mail.
        /// </summary>
        public SortedList <short, StatisticLog> UpdateHeaderHash(SortedList <short, StatisticLog> statistics, Dictionary <short, string> passwordBoxes)
        {
            FileLogger.Info(_loggerName, "Verifica checksum mail scaricate");

            try
            {
                String[]   files      = MailInfo.GetInfoFiles(_parameters.DropFolder);
                List <int> isActiveIn = new List <int> {
                    0, 1, 2
                };
                //rimuove o sposta le mail processate
                MailInfo mailInfo = null;
                DateTime start, end;
                foreach (String filename in files)
                {
                    try
                    {
                        mailInfo = null;
                        start    = DateTime.Now;
                        if (_cancelRequest())
                        {
                            FileLogger.Info(_loggerName, "Chiusura modulo invocata dall'utente.");
                            return(statistics);
                        }

                        mailInfo = MailInfo.Load(filename);

                        if (mailInfo.Status != MailInfo.ProcessStatus.Downloaded)
                        {
                            end = DateTime.Now;
                            if (statistics != null && mailInfo != null && mailInfo.IDPECMailBox > 0 && statistics.Keys.Any(f => f == mailInfo.IDPECMailBox))
                            {
                                statistics[mailInfo.IDPECMailBox].ElaboratedTime = statistics[mailInfo.IDPECMailBox].ElaboratedTime + (TimeSpan.FromTicks(end.Ticks) - TimeSpan.FromTicks(start.Ticks));
                            }
                            continue;
                        }

                        //ok, la mail non esiste bisogna processarla
                        if (!MailStoreFacade.Factory.PECMailFacade.ChecksumExists(mailInfo.EmlHash, mailInfo.MailBoxRecipient))
                        {
                            end = DateTime.Now;
                            if (statistics != null && mailInfo != null && mailInfo.IDPECMailBox > 0 && statistics.Keys.Any(f => f == mailInfo.IDPECMailBox))
                            {
                                statistics[mailInfo.IDPECMailBox].ElaboratedTime = statistics[mailInfo.IDPECMailBox].ElaboratedTime + (TimeSpan.FromTicks(end.Ticks) - TimeSpan.FromTicks(start.Ticks));
                            }
                            continue;
                        }

                        //se esiste e mi trovo a questo punto, aggiorno il valore dell'headerChecksum
                        IList <PECMail> results = MailStoreFacade.Factory.PECMailFacade.GetByChecksum(mailInfo.EmlHash, mailInfo.MailBoxRecipient, isActiveIn);
                        foreach (PECMail pecMail in results.Where(item => string.IsNullOrEmpty(item.HeaderChecksum)))
                        {
                            PECMail temp = pecMail;
                            temp.HeaderChecksum = mailInfo.HeaderHash;
                            MailStoreFacade.Factory.PECMailFacade.Update(ref temp);
                            FileLogger.Info(_loggerName, string.Format("HeaderHash aggiornato per la Mail Id:{0}.", temp.Id));
                        }

                        //Old: Non serve più importare la mail perchè esiste già, verra rimossa nella fase di Release, quindi la segno come archiviata
                        mailInfo.UpdateStatus(MailInfo.ProcessStatus.Archived);
                        mailInfo.Save();
                        WashOnlinePecNotErased(mailInfo, passwordBoxes[mailInfo.IDPECMailBox]);
                        end = DateTime.Now;

                        if (statistics != null && mailInfo != null && statistics.Keys.Any(f => f == mailInfo.IDPECMailBox))
                        {
                            statistics[mailInfo.IDPECMailBox].ElaboratedTime = statistics[mailInfo.IDPECMailBox].ElaboratedTime + (TimeSpan.FromTicks(end.Ticks) - TimeSpan.FromTicks(start.Ticks));
                        }
                    }
                    catch (Exception ex_int)
                    {
                        String pecName = filename;
                        if (mailInfo != null)
                        {
                            pecName = mailInfo.Subject;
                            try
                            {
                                PECMailBox box = MailStoreFacade.Factory.PECMailboxFacade.GetById(mailInfo.IDPECMailBox);
                                MailStoreFacade.Factory.PECMailboxLogFacade.InsertLog(ref box, "ERRORE - Verifica checksum", PECMailBoxLogFacade.PecMailBoxLogType.ErrorEval);
                            }
                            catch (Exception)
                            {
                            }
                        }
                        FileLogger.Error(_loggerName, string.Format("Errore in verifica checksum mail scaricate della mail {0}. Il flusso normale proseguirà con le successive mail.", pecName), ex_int);
                        _sendMessage(string.Format("Errore in verifica checksum mail scaricate della mail {0}. Il flusso normale proseguirà con le successive mail. Exception: {1} - Stacktrace: {2}", pecName, ex_int.Message, _fullStacktrace(ex_int)));
                    }
                }
            }
            catch (Exception ex)
            {
                FileLogger.Error(_loggerName, "Errore in verifica checksum mail scaricate.", ex);
                _sendMessage(string.Format("Errore in verifca checksum mail scaricate. Exception:{0} - Stacktrace: {1}", ex.Message, _fullStacktrace(ex)));
            }
            FileLogger.Info(_loggerName, "Fine checksum mail scaricate");
            return(statistics);
        }
示例#2
0
        /// <summary>
        /// Verifica se la mail scaricata utilizzando l'hash md5 dell'intero Eml se questa è già presente nel db, e quindi non deve essere ri-elaborata.
        /// Allo stesso tempo aggiorna il campo Header Hash calcolato dalla nuova versione della gestione pec nella tabella PecMail per
        /// poter individuare da subito utilizzando il solo header se si tratta di una mail già processata
        /// Se la mail esiste lo status viene già portata ad Archivied affinche venga gestito la release con evenutale cancellazione e backup della mail.
        /// </summary>
        public void UpdateHeaderHash()
        {
            FileLogger.Info(_loggerName, "Verifica checksum mail scaricate");

            try
            {
                String[]   files      = MailInfo.GetInfoFiles(_parameters.DropFolder);
                List <int> isActiveIn = new List <int> {
                    0, 1, 2
                };
                //rimuove o sposta le mail processate
                MailInfo mailInfo = null;
                foreach (String filename in files)
                {
                    try
                    {
                        mailInfo = null;
                        if (_cancelRequest())
                        {
                            FileLogger.Info(_loggerName, "Chiusura modulo invocata dall'utente.");
                            return;
                        }

                        mailInfo = MailInfo.Load(filename);

                        if (mailInfo.Status != MailInfo.ProcessStatus.Downloaded)
                        {
                            continue;
                        }

                        //ok, la mail non esiste bisogna processarla
                        if (!MailStoreFacade.Factory.PECMailFacade.ChecksumExists(mailInfo.EmlHash, mailInfo.MailBoxRecipient))
                        {
                            continue;
                        }

                        //se esiste e mi trovo a questo punto, aggiorno il valore dell'headerChecksum
                        IList <PECMail> results = MailStoreFacade.Factory.PECMailFacade.GetByChecksum(mailInfo.EmlHash, mailInfo.MailBoxRecipient, isActiveIn);
                        foreach (PECMail pecMail in results.Where(item => string.IsNullOrEmpty(item.HeaderChecksum)))
                        {
                            PECMail temp = pecMail;
                            temp.HeaderChecksum = mailInfo.HeaderHash;
                            MailStoreFacade.Factory.PECMailFacade.Update(ref temp);
                            FileLogger.Info(_loggerName, string.Format("HeaderHash aggiornato per la Mail Id:{0}.", temp.Id));
                        }

                        //Old: Non serve più importare la mail perchè esiste già, verra rimossa nella fase di Release, quindi la segno come archiviata
                        mailInfo.UpdateStatus(MailInfo.ProcessStatus.Archived);
                        mailInfo.Save();

                        WashOnlinePecNotErased(mailInfo);
                    }
                    catch (Exception ex_int)
                    {
                        String pecName = filename;
                        if (mailInfo != null)
                        {
                            pecName = mailInfo.Subject;
                        }
                        FileLogger.Error(_loggerName, string.Format("Errore in verifica checksum mail scaricate della mail {0}. Il flusso normale proseguirà con le successive mail.", pecName), ex_int);
                        _sendMessage(string.Format("Errore in verifica checksum mail scaricate della mail {0}. Il flusso normale proseguirà con le successive mail. Exception: {1} - Stacktrace: {2}", pecName, ex_int.Message, _fullStacktrace(ex_int)));
                    }
                }
            }
            catch (Exception ex)
            {
                FileLogger.Error(_loggerName, "Errore in verifica checksum mail scaricate.", ex);
                _sendMessage(string.Format("Errore in verifca checksum mail scaricate. Exception:{0} - Stacktrace: {1}", ex.Message, _fullStacktrace(ex)));
            }
            FileLogger.Info(_loggerName, "Fine checksum mail scaricate");
        }