Esempio n. 1
0
        static public List <Mime> getEmails()
        {
            List <Mime> result = new List <Mime>();

            using (POP3_Client pop3 = new POP3_Client())
            {
                try
                {
                    pop3.Connect("pop3.163.com", 110, false);
                    pop3.Authenticate("*****@*****.**", "6728924", false);

                    //获取邮件信息列表
                    POP3_ClientMessageCollection infos = pop3.Messages;

                    foreach (POP3_ClientMessage info in infos)
                    {
                        byte[] bytes = info.MessageToByte();

                        //解析从Pop3服务器发送过来的邮件信息
                        Mime mime = Mime.Parse(bytes);

                        result.Add(mime);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
            return(result);
        }
        public void SendWithHtmlBody()
        {
            var client = TestClient.CreateNaked(session);
            var user   = client.Users[0];

            SetUp(
                new List <TestUser> {
                user
            },
                null,
                "Это письмо пользователю",
                "Это текст письма пользователю",
                null);

            var mimeHtml = Mime.Parse(@"..\..\Data\UnparseWithHtml.eml");

            mimeHtml.MainEntity.To   = _info.Mime.MainEntity.To;
            mimeHtml.MainEntity.From = _info.Mime.MainEntity.From;
            _info.Mime = mimeHtml;

            Process();

            var mails = TestMailSendLog.Queryable.Where(l => l.User.Id == user.Id).ToList();

            Assert.That(mails.Count, Is.EqualTo(1));

            var mailLog = mails[0];

            Assert.That(mailLog.Mail.Supplier.Id, Is.EqualTo(_info.Supplier.Id));
            Assert.That(mailLog.Mail.Subject, Is.EqualTo("натура сиберика"));
            Assert.That(mailLog.Mail.Body, Is.StringStarting("\r\nДОБРЫЙ ДЕНЬ!\r\nНаша фирма является поставщиком и официальным представителем органической косметики Натура Сиберика. Мы уже поставляем эту косметику в вашу аптеку по ул.Советская."));
        }
Esempio n. 3
0
        public void Check_destination_addresses()
        {
            client = TestClient.CreateNaked(session);
            session.Transaction.Commit();

            handler = new WaybillEmailSourceHandlerForTesting(Settings.Default.TestIMAPUser, Settings.Default.TestIMAPPass);

            var message = Mime.Parse(@"..\..\Data\EmailSourceHandlerTest\WithCC.eml");

            message.MainEntity.To.Clear();
            message.MainEntity.Cc.Clear();

            var addrTo = new GroupAddress();

            addrTo.GroupMembers.Add(new MailboxAddress("*****@*****.**"));
            message.MainEntity.To.Add(addrTo);

            var addrCc = new GroupAddress();

            addrCc.GroupMembers.Add(new MailboxAddress(String.Format("{0}@waybills.analit.net", client.Addresses[0].Id)));
            addrCc.GroupMembers.Add(new MailboxAddress("*****@*****.**"));
            message.MainEntity.Cc.Add(addrCc);

            handler.CheckMime(message);
        }
Esempio n. 4
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));
        }
		public void Person_contact_from_supplier()
		{
			var message = Mime.Parse(@"..\..\Data\MailContextFixture\Unparse_Protek.eml");
			var context = new MailContext();
			var name = Generator.Name();
			var email = name + "@test.ru";
			var fromList = new AddressList();
			fromList.Add(new MailboxAddress(email));

			var supplier = TestSupplier.CreateNaked(session);
			supplier.Name = name;
			session.Save(supplier);
			var group = supplier.ContactGroupOwner.AddContactGroup(ContactGroupType.MiniMails);
			session.Save(group);
			group.AddPerson("Tестовая персона");
			session.Save(group.Persons[0]);
			var contact = group.Persons[0].AddContact(ContactType.Email, email);
			session.Save(contact);

			FlushAndCommit();
			context.ParseMime(message, fromList);

			Assert.AreEqual(context.Suppliers.Count, 1);
			Assert.AreEqual(context.Suppliers[0].Name, name);
		}
Esempio n. 6
0
        private List <Mime> GetEmails(string pop3Server, int pop3Port, bool pop3UseSsl, string username, string password, out List <string> mailMsgIds)
        {
            mailMsgIds = new List <string>();
            List <Mime>   result      = new List <Mime>();
            List <string> gotEmailIds = new List <string>();

            using (POP3_Client pop3 = new POP3_Client())
            {
                pop3.Connect(pop3Server, pop3Port, pop3UseSsl);
                pop3.Authenticate(username, password, false);
                POP3_ClientMessageCollection infos = pop3.Messages;
                int maxRetriveMail = this.GetMaxRetrieveMail();
                int messageCount   = infos != null ? infos.Count : 0;
                int totalEmails    = messageCount > maxRetriveMail ? maxRetriveMail : messageCount;

                //foreach (POP3_ClientMessage info in infos)
                for (int i = totalEmails; i > 0; i--)
                {
                    var info = infos[i - 1];
                    if (gotEmailIds.Contains(info.UID))
                    {
                        continue;
                    }
                    byte[] bytes = info.MessageToByte();
                    gotEmailIds.Add(info.UID);
                    Mime mime = Mime.Parse(bytes);
                    result.Add(mime);
                }

                mailMsgIds.AddRange(gotEmailIds);
            }

            return(result);
        }
        public void Parse_x_real_to()
        {
            var mime       = Mime.Parse(@"..\..\Data\MimeExtentionsFixture\Исходное письмо.eml");
            var recipients = mime.GetRecipients();

            Assert.That(recipients, Is.EquivalentTo(new[] { "*****@*****.**" }));
        }
        private static IEnumerable <MailAttachment> GetAttachments(IEnumerable <MIME_Entity> attachments)
        {
            foreach (var attachment in attachments)
            {
                var parsedMime = Mime.Parse(attachment.ToByte(null, null));

                yield return(new MailAttachment(attachment.ContentDisposition.Param_FileName, parsedMime.MainEntity.Data));
            }
        }
Esempio n. 9
0
        /// <summary>
        /// 根据邮件文件制作内存流
        /// </summary>
        /// <param name="_str_eml_file_name_">文件名</param>
        /// <returns>内存流</returns>
        public MemoryStream MemoryStreamMime(string _str_eml_file_name_)
        {
            MemoryStream mimeStream = null;

            if (File.Exists(_str_eml_file_name_))
            {
                mimeStream = new MemoryStream();
                Mime.Parse(_str_eml_file_name_).ToStream(mimeStream);
            }
            return(mimeStream);
        }
Esempio n. 10
0
        private Mime PatchTo(string file, string to, string from)
        {
            var mime = Mime.Parse(file);
            var main = mime.MainEntity;

            main.To.Clear();
            main.To.Parse(to);
            main.From.Clear();
            main.From.Parse(from);
            return(mime);
        }
Esempio n. 11
0
        public void ApplicationTypeTests()
        {
            var formats = new[] { "js", "json", "swf", "xap", "zip" };

            foreach (var format in formats)
            {
                var mime = Mime.FromFormat(format);

                Assert.Equal(MediaType.Application, mime.Type);
                Assert.Equal(mime, Mime.Parse(mime.Name));
            }
        }
		public void FromAddressParseProblem()
		{
			var message = Mime.Parse(@"..\..\Data\MailContextFixture\Unparse_Protek.eml");
			var fromList = MimeEntityExtentions.GetAddressList(message);
			Assert.That(fromList.Count, Is.EqualTo(0), "Список разборанных адресов отправителя должен быть пустым");

			var context = new MailContext();

			var exception = Assert.Throws<FromParseException>(() => context.ParseMime(message, fromList));

			Assert.That(exception.Message, Is.StringStarting("Не смогли разобрать список отправителей письма для сопоставления с поставщиками"));
		}
Esempio n. 13
0
        public void AudioTypeTests()
        {
            var formats = new[] { "aiff", "aif", "aac", "mp3", "m4a", "opus", "ra", "wav", "wma" };

            foreach (var format in formats)
            {
                var mime = Mime.FromFormat(format);

                Assert.Equal(MediaType.Audio, mime.Type);
                Assert.Equal(mime, Mime.Parse(mime.Name));
            }
        }
Esempio n. 14
0
        public void VideoTypeTests()
        {
            var formats = new[] { "avi", "f4v", "flv", "m4s", "m4v", "mp4", "mpg", "mpeg", "qt", "webm", "wmv" };

            foreach (var format in formats)
            {
                var mime = Mime.FromFormat(format);

                Assert.Equal(MediaType.Video, mime.Type);
                Assert.Equal(mime, Mime.Parse(mime.Name));
            }
        }
Esempio n. 15
0
        public void TextTypeTests()
        {
            // Text
            var formats = new[] { "css", "csv", "txt", "xml" };

            foreach (var format in formats)
            {
                var mime = Mime.FromFormat(format);

                Assert.Equal(MediaType.Text, mime.Type);
                Assert.Equal(mime, Mime.Parse(mime.Name));
            }
        }
Esempio n. 16
0
        public void ImageTypeTests()
        {
            var formats = new[] {
                "bmp", "gif", "heif", "ico", "jpg", "jpeg", "jxr", "png", "tif", "tiff", "webp"
            };

            foreach (var format in formats)
            {
                var mime = Mime.FromFormat(format);

                Assert.Equal(MediaType.Image, mime.Type);
                Assert.Equal(mime, Mime.Parse(mime.Name));
            }
        }
Esempio n. 17
0
        public List <Mime> GetEmailsByLumiSoft()
        {                                                //需要首先设置这些信息
            string        pop3Server  = this.pop3Server; //邮箱服务器 如:"pop.sina.com.cn";或 "pop.tom.com" 好像sina的比较快
            int           pop3Port    = this.pop3Port;   //端口号码   用"110"好使。最好看一下你的邮箱服务器用的是什么端口号
            bool          pop3UseSsl  = false;
            string        username    = this.username;   //你的邮箱用户名
            string        password    = this.password;   //你的邮箱密码
            List <string> gotEmailIds = new List <string>();
            List <Mime>   result      = new List <Mime>();

            using (POP3_Client pop3 = new POP3_Client())
            {
                try
                {
                    //与Pop3服务器建立连接
                    pop3.Connect(pop3Server, pop3Port, pop3UseSsl);
                    //验证身份
                    pop3.Login(username, password);
                    //获取邮件信息列表
                    POP3_ClientMessageCollection infos = pop3.Messages;

                    foreach (POP3_ClientMessage info in infos)
                    {
                        //每封Email会有一个在Pop3服务器范围内唯一的Id,检查这个Id是否存在就可以知道以前有没有接收过这封邮件
                        if (gotEmailIds.Contains(info.UID))
                        {
                            continue;
                        }

                        //获取这封邮件的内容
                        byte[] bytes = info.MessageToByte();

                        //记录这封邮件的Id
                        gotEmailIds.Add(info.UID);

                        //解析从Pop3服务器发送过来的邮件信息
                        Mime mime = Mime.Parse(bytes);

                        //mime.Attachments[0].DataToFile(@"c:\" + mime.Attachments[0].ContentDisposition_FileName);
                        result.Add(mime);
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
            return(result);
        }
Esempio n. 18
0
        public void FontTypeTests()
        {
            var formats = new[] {
                "otf", "ttf", "woff", "woff2"
            };

            foreach (var format in formats)
            {
                var mime = Mime.FromFormat(format);

                Assert.Equal(format, mime.Format);
                Assert.Equal(MediaType.Font, mime.Type);
                Assert.Equal(mime, Mime.Parse(mime.Name));
            }
        }
Esempio n. 19
0
        public void MimesToFormatId()
        {
            // Audio
            Assert.Equal(FormatId.Aac, Mime.Parse("audio/aac").ToFormatId());
            Assert.Equal(FormatId.Flac, Mime.Parse("audio/flac").ToFormatId());
            Assert.Equal(FormatId.Mp3, Mime.Parse("audio/mpeg").ToFormatId());
            Assert.Equal(FormatId.Ogg, Mime.Parse("audio/ogg").ToFormatId());
            Assert.Equal(FormatId.Opus, Mime.Parse("audio/opus").ToFormatId());

            // Images
            Assert.Equal(FormatId.Png, Mime.Parse("image/png").ToFormatId());
            Assert.Equal(FormatId.Tiff, Mime.Parse("image/tiff").ToFormatId());
            Assert.Equal(FormatId.Gif, Mime.Parse("image/gif").ToFormatId());
            Assert.Equal(FormatId.Heif, Mime.Parse("image/heif").ToFormatId());
            Assert.Equal(FormatId.Jpeg, Mime.Parse("image/jpeg").ToFormatId());
            Assert.Equal(FormatId.Jxr, Mime.Parse("image/vnd.ms-photo").ToFormatId());
            Assert.Equal(FormatId.Png, Mime.Parse("image/png").ToFormatId());
            Assert.Equal(FormatId.Svg, Mime.Parse("image/svg+xml").ToFormatId());
            Assert.Equal(FormatId.WebP, Mime.Parse("image/webp").ToFormatId());
        }
Esempio n. 20
0
        public void MimesFromNames()
        {
            // Audio
            Assert.Equal("aac", Mime.Parse("audio/aac").Format);
            Assert.Equal("flac", Mime.Parse("audio/flac").Format);
            Assert.Equal("mp3", Mime.Parse("audio/mpeg").Format);
            Assert.Equal("oga", Mime.Parse("audio/ogg").Format);
            Assert.Equal("opus", Mime.Parse("audio/opus").Format);

            // Images
            Assert.Equal("avif", Mime.Parse("image/avif").Format);
            Assert.Equal("png", Mime.Parse("image/png").Format);
            Assert.Equal("tiff", Mime.Parse("image/tiff").Format);
            Assert.Equal("gif", Mime.Parse("image/gif").Format);
            Assert.Equal("heif", Mime.Parse("image/heif").Format);
            Assert.Equal("jpeg", Mime.Parse("image/jpeg").Format);
            Assert.Equal("jxr", Mime.Parse("image/vnd.ms-photo").Format);
            Assert.Equal("png", Mime.Parse("image/png").Format);
            Assert.Equal("svg", Mime.Parse("image/svg+xml").Format);
            Assert.Equal("webp", Mime.Parse("image/webp").Format);

            // Videos
            Assert.Equal("wmv", Mime.Parse("video/x-ms-wmv").Format);
            Assert.Equal("mp4", Mime.Parse("video/mp4").Format);
            Assert.Equal("mov", Mime.Parse("video/quicktime").Format);
            Assert.Equal("ogv", Mime.Parse("video/ogg").Format);

            // Application
            Assert.Equal("js", Mime.Parse("application/javascript").Format);
            Assert.Equal("json", Mime.Parse("application/json").Format);
            Assert.Equal("zip", Mime.Parse("application/zip").Format);

            // Text
            Assert.Equal("css", Mime.Parse("text/css").Format);

            // Fonts
            Assert.Equal("ttf", Mime.Parse("font/ttf").Format);
            Assert.Equal("woff", Mime.Parse("font/woff").Format);
            Assert.Equal("woff2", Mime.Parse("font/woff2").Format);
        }
        public void SendWithEmptyBody()
        {
            var client = TestClient.CreateNaked(session);
            var user   = client.Users[0];

            SetUp(
                new List <TestUser> {
                user
            },
                null,
                "Это письмо пользователю",
                "Это текст письма пользователю",
                null);

            var mimeEmptyBody = Mime.Parse(@"..\..\Data\UnparseWithEmptyBody.eml");

            Assert.IsNotNull(mimeEmptyBody.MainEntity.Subject);
            Assert.IsNotNull(mimeEmptyBody.BodyText);
            Assert.That(mimeEmptyBody.BodyText, Is.EqualTo(String.Empty));
            Assert.IsNull(mimeEmptyBody.BodyHtml);
            mimeEmptyBody.MainEntity.To   = _info.Mime.MainEntity.To;
            mimeEmptyBody.MainEntity.From = _info.Mime.MainEntity.From;
            _info.Mime = mimeEmptyBody;

            Process();

            var mails = TestMailSendLog.Queryable.Where(l => l.User.Id == user.Id).ToList();

            Assert.That(mails.Count, Is.EqualTo(1));

            var mailLog = mails[0];

            Assert.That(mailLog.Mail.Supplier.Id, Is.EqualTo(_info.Supplier.Id));
            Assert.That(mailLog.Mail.Subject, Is.EqualTo("Отказы по заявке № АХ1-1131222"));
            Assert.That(mailLog.Mail.Body, Is.Null);
            Assert.That(mailLog.Mail.Attachments.Count, Is.EqualTo(1));
            Assert.That(mailLog.Mail.Attachments[0].FileName, Is.EqualTo("K1795MZАХ1-1131222D120305.xls"));
        }
        public void CheckHtmlToText()
        {
            var mime = Mime.Parse(@"..\..\Data\UnparseWithHtml.eml");

            Assert.That(mime.BodyText, Is.Null.Or.Empty);
            Assert.IsNotEmpty(mime.BodyHtml);

            var convertedText = mime.HtmlToText();

            Assert.IsNotEmpty(convertedText);

            var expectedText = @"
ДОБРЫЙ ДЕНЬ!
Наша фирма является поставщиком и официальным представителем органической косметики Натура Сиберика. Мы уже поставляем эту косметику в вашу аптеку по ул.Советская.
Наш склад находится в г.Белгород. Доставка в г Губкин и Ст.Оскол по средам.
На этой неделе машина будет в пятницу в связи с поступлением товара в четверг. Высылаю наши прайсы. и презентацию новинок.Наш прайс лист вы можете найти в ""аналитке""
С уважением,
ИП Деденко Виктория Владимировна
Белгород
8 960 628 51 32
";

            Assert.That(convertedText, Is.EqualTo(expectedText));
        }
Esempio n. 23
0
        public static ChannelMessage From(Stream stream, ChannelMessageHeader header)
        {
            stream.Seek(0, SeekOrigin.Begin);

            var mimeMessage = Mime.Parse(stream);
            var message     = new ChannelMessage();

            if (header != null)
            {
                message.MessageNumber = header.MessageNumber;
                message.Size          = header.Size;
                message.SourceFolder  = header.SourceFolder;
                message.IsRead        = header.IsRead;
                message.IsStarred     = header.IsStarred;
                message.DateReceived  = header.DateReceived;
            }
            else
            {
                message.SourceFolder = "INBOX";
                message.DateReceived = DateTime.Now;
            }

            message.Context           = mimeMessage.MainEntity.Subject;
            message.MessageIdentifier = mimeMessage.MainEntity.MessageID;
            message.InReplyTo         = mimeMessage.MainEntity.InReplyTo;
            message.BodyHtml          = mimeMessage.BodyHtml.ToStream();

            if (!String.IsNullOrEmpty(mimeMessage.BodyText))
            {
                message.BodyText = mimeMessage.BodyText.ToStream();
            }

            message.From = new SourceAddress(mimeMessage.MainEntity.From.ToAddressListString());

            if (mimeMessage.MainEntity.To == null)
            {
                var deliveredTo = mimeMessage.MainEntity.Header.GetFirst("Delivered-To:");

                if (deliveredTo != null)
                {
                    message.To = new SourceAddressCollection(deliveredTo.Value);
                }
            }
            else
            {
                message.To = new SourceAddressCollection(mimeMessage.MainEntity.To.ToAddressListString());
            }

            if (mimeMessage.MainEntity.Cc != null)
            {
                message.CC = new SourceAddressCollection(mimeMessage.MainEntity.Cc.ToAddressListString());
            }

            if (mimeMessage.MainEntity.Bcc != null)
            {
                message.BCC = new SourceAddressCollection(mimeMessage.MainEntity.Bcc.ToAddressListString());
            }

            foreach (var att in mimeMessage.Attachments)
            {
                var attachment = new ChannelAttachment
                {
                    Filename = att.ContentDisposition == ContentDisposition_enum.Attachment
                                                        ? att.ContentDisposition_FileName
                                                        : att.ContentType_Name
                };

                if (!String.IsNullOrEmpty(att.ContentID))
                {
                    attachment.ContentId = att.ContentID.Trim('<', '>');
                }

                attachment.ContentType = String.IsNullOrEmpty(att.ContentID)
                                        ? ContentType.Attachment : ContentType.Inline;

                attachment.ContentStream = new MemoryStream(att.Data);

                message.Attachments.Add(attachment);
            }

            return(message);
        }
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //string muster = File.ReadAllText(@"C:\Users\maxre\Documents\Faust.txt");
            StringBuilder musterbuilder = new StringBuilder();


            // alle Dateien durchlaufen
            var files = from file in Directory.EnumerateFiles(@"C:\Users\maxre\Documents\GMailGesendet\Gesendet_20171017-2254\Nachrichten", "*.eml", SearchOption.AllDirectories)
                        //from text in File.ReadAllText(file)
                        select new
            {
                File = file,
                //       text = text
            };
            //  Email Body parsen und zu einem Ganzen zusammenhängen
            Random     zufall       = new Random();
            int        maxSize      = 40000; // max. Länge des Vorgabetexts
            int        anzahlWörter = 5000;
            List <int> indizes      = new List <int>();

            while (musterbuilder.Length < maxSize)
            {
                var zufallsIndex = zufall.Next(files.Count());
                if (!indizes.Contains(zufallsIndex))
                {
                    Mime m = Mime.Parse(files.ElementAt(zufallsIndex).File);
                    indizes.Add(zufallsIndex);
                    musterbuilder.Append(m.BodyText);
                }
            }

            string muster = musterbuilder.ToString();

            // Wörter aus Text generieren

            foreach (var item in ".,;:\"\r\n!>")
            {
                muster = muster.Replace(item, ' ');
            }
            bool regieanweisung = false;
            bool rundeKlammer   = false;
            bool eckigeKlammer  = false;
            // Text in _Unterstrichen entfernen und meerfache Lehrzeichen loswerden
            StringBuilder gesäubert = new StringBuilder();

            for (int i = 0; i < muster.Length; i++)
            {
                if (muster[i] == '_')
                {
                    regieanweisung = !regieanweisung;
                }
                else if (muster[i] == '(')
                {
                    rundeKlammer = true;
                }
                else if (muster[i] == ')')
                {
                    rundeKlammer = false;
                }
                else if (muster[i] == '[')
                {
                    eckigeKlammer = true;
                }
                else if (muster[i] == ']')
                {
                    eckigeKlammer = false;
                }
                else if (!regieanweisung && !eckigeKlammer && !rundeKlammer && !(muster[i] == ' ' && (gesäubert.Length == 0 || gesäubert[gesäubert.Length - 1] == ' ')))
                {
                    gesäubert.Append(muster[i]);
                }
            }
            string gesäubertString = gesäubert.ToString().ToLower();

            string[] wörter = gesäubertString.Split(' ');

            // Monogramme, Digramme erzeugen...
            int           n       = 3;
            List <NGramm> ngramme = new List <NGramm>();

            for (int i = 0; i < wörter.Length - n; i++)
            {
                // Nehme die nächsten n Wörter
                // Gibt es dazu schon ein N-Gramm?
                NGramm aktuellesNGramm = null;
                foreach (var item in ngramme)
                {
                    bool treffer = true;

                    for (int j = 0; j < n; j++)
                    {
                        if (item.Wörter[j] != wörter[i + j])
                        {
                            treffer = false;
                        }
                    }

                    if (treffer)
                    {
                        aktuellesNGramm = item;
                        break;
                    }
                }
                if (aktuellesNGramm != null) // Falls ja: Speichere Folgewort in N-Gramm
                {
                    aktuellesNGramm.Folgewörter.Add(wörter[i + n]);
                }
                else  // Falls nein: Erzeuge N-Gramm mit Folgewort
                {
                    ngramme.Add(new NGramm());
                    string[] w = new string[n];

                    for (int k = 0; k < n; k++)
                    {
                        w[k] = wörter[i + k];
                    }
                    ngramme.Last().Wörter = w;
                    ngramme.Last().Folgewörter.Add(wörter[i + n]);
                }
            }
            // Sortieren nach Häufigkeit
            IEnumerable <NGramm> sortedListGenerator = from word in ngramme
                                                       orderby word.Folgewörter.Count() ascending
                                                       select word;

            List <NGramm> sortedList = new List <NGramm>();

            foreach (NGramm ngramm in sortedListGenerator)
            {
                sortedList.Add(ngramm);
            }



            List <string> generierteWörter = new List <string>();
            NGramm        g = ngramme[zufall.Next(sortedList.Count)];

            for (int i = 0; i < n; i++)
            {
                generierteWörter.Add(g.Wörter[i]);
            }
            // Nehme n Wörter irgendwo aus dem Text
            for (int i = 0; i < anzahlWörter; i++)
            {
                NGramm aktuellesNGramm = null;
                foreach (var item in sortedList)
                {
                    bool treffer = true;

                    for (int j = 0; j < n; j++)
                    {
                        if (item.Wörter[j] != generierteWörter[generierteWörter.Count - n + j])
                        {
                            treffer = false;
                        }
                    }

                    if (treffer)
                    {
                        aktuellesNGramm = item;
                        break;
                    }
                }

                generierteWörter.Add(aktuellesNGramm.Folgewörter[zufall.Next(aktuellesNGramm.Folgewörter.Count)]);
            }
            StringBuilder generierterText = new StringBuilder();

            for (int i = 0; i < generierteWörter.Count; i++)
            {
                if (i == generierteWörter.Count - 1)
                {
                    generierterText.Append(generierteWörter[i]);
                }
                else
                {
                    generierterText.Append(generierteWörter[i] + " ");
                }
            }
            string generierterTextString = generierterText.ToString();
        }
Esempio n. 25
0
        public void ProcessIMAPFolder()
        {
            using (var imapClient = new IMAP_Client()) {
                _imapClient = imapClient;
                ConnectToIMAP();

                try {
                    var items    = Enumerable.Empty <IMAP_FetchItem>().ToArray();
                    var toDelete = new List <IMAP_FetchItem>();
                    do
                    {
                        toDelete.Clear();
                        ImapReader.PingReader();
                        items = FetchUIDs();
                        if (log.IsDebugEnabled)
                        {
                            log.DebugFormat("Получено {0} UIDs", items.Length);
                        }
                        //обрабатываем мисьма пачками что бы уменьшить вероятность появления дублей
                        //при остановке шатной или аварийной остановке
                        items = items.Take(100).ToArray();
                        ImapReader.PingReader();

                        foreach (var item in items)
                        {
                            if (log.IsDebugEnabled)
                            {
                                log.DebugFormat("Обработка {0} UID", item.UID);
                            }

                            IMAP_FetchItem[] OneItem = null;
                            try {
                                OneItem = FetchMessages(item.UID);

                                Message = Mime.Parse(OneItem[0].MessageData);

                                CurrentUID = item.UID;

                                ImapReader.PingReader();
                                ImapReader.ProcessMime(Message);
                                toDelete.Add(item);
                            }
                            catch (Exception ex) {
                                if (log.IsDebugEnabled)
                                {
                                    log.Debug(String.Format("Не удалось обработать письмо {0} UID", item.UID), ex);
                                }
                                Message = null;
                                var errorInfo = GetErrorInfo(item.UID);
                                if (UIDTimeout(errorInfo))
                                {
                                    ErrorInfos.Remove(errorInfo);
                                    toDelete.Add(item);
                                    ImapReader.ProcessBrokenMessage(item, OneItem, ex);
                                }
                            }
                        }

                        //Производим удаление писем
                        if (toDelete.Count > 0)
                        {
                            var sequence = new IMAP_SequenceSet();

                            sequence.Parse(String.Join(",", toDelete.Select(i => i.UID.ToString())), long.MaxValue);
                            imapClient.DeleteMessages(sequence, true);
                        }
                    } while (items.Length > 0 && toDelete.Count > 0);
                }
                finally {
                    Message = null;
                }
            }
        }
Esempio n. 26
0
        static void pop3()
        {
            List <string> gotemailids = new List <string>();

            using (LumiSoft.Net.POP3.Client.POP3_Client pop3 = new POP3_Client())
            {
                try
                {
                    //与pop3服务器建立连接
                    pop3.Connect("pop.qq.com", 110, false);
                    //验证身份
                    pop3.Login("*****@*****.**", "myhaiyan");

                    //获取邮件信息列表
                    POP3_ClientMessageCollection infos = pop3.Messages;
                    foreach (POP3_ClientMessage info in infos)
                    {
                        //每封email会有一个在pop3服务器范围内唯一的id,检查这个id是否存在就可以知道以前有没有接收过这封邮件
                        if (gotemailids.Contains(info.UID))
                        {
                            continue;
                        }
                        //获取这封邮件的内容
                        byte[] bytes = info.MessageToByte();
                        //记录这封邮件的id
                        gotemailids.Add(info.UID);

                        //解析从pop3服务器发送过来的邮件信息
                        Mime m = Mime.Parse(bytes);
                        if (m != null)
                        {
                            string mailfrom     = "";
                            string mailfromname = "";
                            if (m.MainEntity.From != null)
                            {
                                for (int i = 0; i < m.MainEntity.From.Mailboxes.Length; i++)
                                {
                                    if (i == 0)
                                    {
                                        mailfrom = (m.MainEntity.From).Mailboxes[i].EmailAddress;
                                    }
                                    else
                                    {
                                        mailfrom += string.Format(",{0}", (m.MainEntity.From).Mailboxes[i].EmailAddress);
                                    }
                                    mailfromname = (m.MainEntity.From).Mailboxes[0].DisplayName != ""
                                                       ? (m.MainEntity.From).Mailboxes[0].DisplayName
                                                       : (m.MainEntity.From).Mailboxes[0].LocalPart;
                                }
                            }
                            string mailto             = "";
                            string mailtotocollection = "";
                            if (m.MainEntity.To != null)
                            {
                                mailtotocollection = m.MainEntity.To.ToAddressListString();

                                for (int i = 0; i < m.MainEntity.To.Mailboxes.Length; i++)
                                {
                                    if (i == 0)
                                    {
                                        mailto = (m.MainEntity.To).Mailboxes[i].EmailAddress;
                                    }
                                    else
                                    {
                                        mailto += string.Format(",{0}", (m.MainEntity.To).Mailboxes[i].EmailAddress);
                                    }
                                }
                            }
                        }
                        //获取附件
                        foreach (MimeEntity entry in m.Attachments)
                        {
                            string filename = entry.ContentDisposition_FileName; //获取文件名称
                            string path     = AppDomain.CurrentDomain.BaseDirectory + @"attch\" + filename;
                            if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + @"attch"))
                            {
                                Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + @"attch");
                            }
                            if (File.Exists(path))
                            {
                                Random random  = new Random();
                                int    newfile = random.Next(1, 100000);
                                path = AppDomain.CurrentDomain.BaseDirectory + @"attch\" + newfile.ToString();
                                Directory.CreateDirectory(path);
                                path += @"\" + filename;
                            }
                            byte[]     data        = entry.Data;
                            FileStream pfilestream = null;
                            pfilestream = new FileStream(path, FileMode.Create);
                            pfilestream.Write(data, 0, data.Length);
                            pfilestream.Close();
                        }
                    }
                }
                catch (Exception ex)
                {
                }
            }
        }