public bool Save(Mail mail, MailInfo mailInfo) { lock (_lockObj) {//�r������ var fname = CreateName(); var fileName = string.Format("{0}\\MF_{1}", Dir, fname); if (mail.Save(fileName)) { fileName = string.Format("{0}\\DF_{1}", Dir, fname); mailInfo.Save(fileName); return(true); } return(false); } }
public void Saveによる保存() { //setUp var tmpFile = Path.GetTempFileName(); var sut = new MailInfo(_dfFile); //exercise sut.Save(tmpFile); //verify var src = File.ReadAllLines(_dfFile); var dst = File.ReadAllLines(tmpFile); Assert.AreEqual(src.Count(), dst.Count()); for (int i = 0; i < src.Count(); i++) { Assert.AreEqual(src[i], dst[i]); } //tearDown File.Delete(tmpFile); }
/// <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); }
/// <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"); }