Beispiel #1
0
        private string ExtractFileFromAttachment(string filename, string archFileName, string externalFileName)
        {
            using (var fs = new FileStream(filename, FileMode.Open,
                                           FileAccess.Read, FileShare.Read)) {
                var logger = LogManager.GetLogger(GetType());
                try {
                    var message = Mime.Parse(fs);
                    message = UueHelper.ExtractFromUue(message, Path.GetTempPath());

                    var attachments = message.GetValidAttachements();
                    foreach (var entity in attachments)
                    {
                        var attachmentFilename = entity.GetFilename();

                        if (!FileHelper.CheckMask(attachmentFilename, archFileName) &&
                            !FileHelper.CheckMask(attachmentFilename, externalFileName))
                        {
                            continue;
                        }
                        attachmentFilename = Path.Combine(Path.GetTempPath(), attachmentFilename);
                        entity.DataToFile(attachmentFilename);
                        return(attachmentFilename);
                    }
                }
                catch (Exception ex) {
                    logger.ErrorFormat(
                        "Возникла ошибка при попытке перепровести прайс. Не удалось обработать файл {0}. Файл должен быть письмом (*.eml)\n{1}",
                        filename, ex);
                    throw;
                }
            }
            throw new Exception(String.Format("В архиве '{0}' не удалось найти архив '{1}' или файл прайс листа {2}", filename, archFileName, externalFileName));
        }
        /// <summary>
        /// Происходит разбор собственно вложения и сверка его с источниками
        /// </summary>
        private void UnPack(Mime m, ref bool Matched, AddressList FromList, string ShortFileName)
        {
            //Раньше не проверялся весь список From, теперь это делается. Туда же добавляется и Sender
            foreach (var mbFrom in FromList.Mailboxes)
            {
                //Раньше не проверялся весь список TO, теперь это делается
                foreach (var mba in m.MainEntity.To.Mailboxes)
                {
                    var drLS = dtSources.Select(String.Format("(EMailTo = '{0}') and (EMailFrom like '*{1}*')",
                                                              MimeEntityExtentions.GetCorrectEmailAddress(mba.EmailAddress),
                                                              mbFrom.EmailAddress));
                    foreach (DataRow drS in drLS)
                    {
                        if ((drS[SourcesTableColumns.colPriceMask] is String) &&
                            !String.IsNullOrEmpty(drS[SourcesTableColumns.colPriceMask].ToString()))
                        {
                            var priceMask          = (string)drS[SourcesTableColumns.colPriceMask];
                            var priceMaskIsMatched = FileHelper.CheckMask(ShortFileName, priceMask);
                            if (priceMaskIsMatched)
                            {
                                SetCurrentPriceCode(drS);

                                // Пробуем разархивировать
                                var correctArchive = FileHelper.ProcessArchiveIfNeeded(CurrFileName, ExtrDirSuffix, drS["ArchivePassword"].ToString());

                                if (correctArchive)
                                {
                                    string extrFile;
                                    if (ProcessPriceFile(CurrFileName, out extrFile, (ulong)PriceSourceType.EMail))
                                    {
                                        Matched = true;
                                        LogDownloadedPrice((ulong)PriceSourceType.EMail, Path.GetFileName(CurrFileName), extrFile);
                                    }
                                    else
                                    {
                                        LogDownloaderFail((ulong)PriceSourceType.EMail, "Не удалось обработать файл '" +
                                                          Path.GetFileName(CurrFileName) + "'",
                                                          Path.GetFileName(CurrFileName));
                                    }
                                }
                                else
                                {
                                    LogDownloaderFail((ulong)PriceSourceType.EMail, "Не удалось распаковать файл '" +
                                                      Path.GetFileName(CurrFileName) + "'. Файл поврежден",
                                                      Path.GetFileName(CurrFileName));
                                }
                                drS.Delete();
                            }
                        }
                    }
                    dtSources.AcceptChanges();
                }         //foreach (MailboxAddress mba in m.MainEntity.To.Mailboxes)
            }             //foreach (MailboxAddress mbFrom in FromList.Mailboxes)
        }