private static void OnMessageReceived(Connection connection, MailMessageEx message) { if (MessageReceived != null) { MessageReceived(connection, new MessageEventArgs(message)); } }
private void BuildMultiPartMessage(MimeEntity entity, MailMessageEx message) { foreach (MimeEntity current in entity.Children) { if (current != null) { if (string.Equals(current.ContentType.MediaType, MediaTypes.MultipartAlternative, StringComparison.InvariantCultureIgnoreCase) || string.Equals(current.ContentType.MediaType, MediaTypes.MultipartMixed, StringComparison.InvariantCultureIgnoreCase)) { this.BuildMultiPartMessage(current, message); } else { if (!MimeEntity.IsAttachment(current) && (string.Equals(current.ContentType.MediaType, MediaTypes.TextPlain) || string.Equals(current.ContentType.MediaType, MediaTypes.TextHtml))) { message.AlternateViews.Add(this.CreateAlternateView(current)); this.SetMessageBody(message, current); } else { if (string.Equals(current.ContentType.MediaType, MediaTypes.MessageRfc822, StringComparison.InvariantCultureIgnoreCase) && string.Equals(current.ContentDisposition.DispositionType, "attachment", StringComparison.InvariantCultureIgnoreCase)) { message.Children.Add(this.ToMailMessageEx(current)); } else { if (MimeEntity.IsAttachment(current)) { message.Attachments.Add(this.CreateAttachment(current)); } } } } } } }
private MailMessageEx ToMailMessageEx(MimeEntity entity) { if (entity == null) { return(null); } MailMessageEx mailMessageEx = MailMessageEx.CreateMailMessageFromEntity(entity); if (!string.IsNullOrEmpty(entity.ContentType.Boundary)) { mailMessageEx = MailMessageEx.CreateMailMessageFromEntity(entity); this.BuildMultiPartMessage(entity, mailMessageEx); } else { if (string.Equals(entity.ContentType.MediaType, MediaTypes.MessageRfc822, StringComparison.InvariantCultureIgnoreCase)) { if (entity.Children.Count < 0) { throw new Pop3Exception("Invalid child count on message/rfc822 entity."); } mailMessageEx = MailMessageEx.CreateMailMessageFromEntity(entity.Children[0]); this.BuildMultiPartMessage(entity, mailMessageEx); } else { mailMessageEx = MailMessageEx.CreateMailMessageFromEntity(entity); this.BuildSinglePartMessage(entity, mailMessageEx); } } return(mailMessageEx); }
/// <summary> /// Builds the multi part message. /// </summary> /// <param name="entity">The entity.</param> /// <param name="message">The message.</param> private void BuildMultiPartMessage(MimeEntity entity, MailMessageEx message) { foreach (MimeEntity child in entity.Children) { if (child == null) { continue; } if (string.Equals(child.ContentType.MediaType, MediaTypes.MultipartAlternative, StringComparison.InvariantCultureIgnoreCase) || string.Equals(child.ContentType.MediaType, MediaTypes.MultipartMixed, StringComparison.InvariantCultureIgnoreCase)) { BuildMultiPartMessage(child, message); } //if the message is mulitpart/alternative or multipart/mixed then the entity will have children needing parsed. else if (!IsAttachment(child) && (string.Equals(child.ContentType.MediaType, MediaTypes.TextPlain) || string.Equals(child.ContentType.MediaType, MediaTypes.TextHtml))) { message.AlternateViews.Add(CreateAlternateView(child)); SetMessageBody(message, child); } //add the alternative views. else if (string.Equals(child.ContentType.MediaType, MediaTypes.MessageRfc822, StringComparison.InvariantCultureIgnoreCase) && string.Equals(child.ContentDisposition.DispositionType, DispositionTypeNames.Attachment, StringComparison.InvariantCultureIgnoreCase)) { message.Children.Add(ToMailMessageEx(child)); } //create a child message and else if (IsAttachment(child)) { message.Attachments.Add(CreateAttachment(child)); } } }
private void BuildMultiPartMessage(MimeEntity entity, MailMessageEx message) { foreach (MimeEntity entity2 in entity.Children) { if (entity2 == null) { continue; } if (string.Equals(entity2.ContentType.MediaType, MediaTypes.MultipartAlternative, StringComparison.InvariantCultureIgnoreCase) || string.Equals(entity2.ContentType.MediaType, MediaTypes.MultipartMixed, StringComparison.InvariantCultureIgnoreCase)) { this.BuildMultiPartMessage(entity2, message); continue; } if (!IsAttachment(entity2) && (string.Equals(entity2.ContentType.MediaType, MediaTypes.TextPlain) || string.Equals(entity2.ContentType.MediaType, MediaTypes.TextHtml))) { message.AlternateViews.Add(this.CreateAlternateView(entity2)); this.SetMessageBody(message, entity2); continue; } if (string.Equals(entity2.ContentType.MediaType, MediaTypes.MessageRfc822, StringComparison.InvariantCultureIgnoreCase) && string.Equals(entity2.ContentDisposition.DispositionType, "attachment", StringComparison.InvariantCultureIgnoreCase)) { message.Children.Add(this.ToMailMessageEx(entity2)); } else if (IsAttachment(entity2)) { message.Attachments.Add(this.CreateAttachment(entity2)); } } }
private void SetMessageBody(MailMessageEx message, MimeEntity child) { Encoding encoding = child.GetEncoding(); message.Body = this.DecodeBytes(child.Content.ToArray(), encoding); message.BodyEncoding = encoding; message.IsBodyHtml = string.Equals(MediaTypes.TextHtml, child.ContentType.MediaType, StringComparison.InvariantCultureIgnoreCase); }
/// <summary> /// Write the HTML to a temporary file and render it to the HTML view /// </summary> /// <param name="mailMessageEx"> /// The mail Message Ex. /// </param> private void SetBrowserDocument(MailMessageEx mailMessageEx) { const int Length = 256; // double d = new Random().NextDouble(); string tempPath = Path.GetTempPath(); string htmlFile = Path.Combine(tempPath, "papercut.htm"); string htmlText = mailMessageEx.Body; foreach (var attachment in mailMessageEx.Attachments) { if ((!string.IsNullOrEmpty(attachment.ContentId)) && (attachment.ContentStream != null)) { string fileName = Path.Combine(tempPath, attachment.ContentId); using (var fs = File.OpenWrite(fileName)) { var buffer = new byte[Length]; int bytesRead = attachment.ContentStream.Read(buffer, 0, Length); // write the required bytes while (bytesRead > 0) { fs.Write(buffer, 0, bytesRead); bytesRead = attachment.ContentStream.Read(buffer, 0, Length); } fs.Close(); } htmlText = htmlText.Replace(string.Format(@"cid:{0}", attachment.ContentId), attachment.ContentId) .Replace(string.Format(@"cid:'{0}'", attachment.ContentId), attachment.ContentId) .Replace(string.Format(@"cid:""{0}""", attachment.ContentId), attachment.ContentId); } } File.WriteAllText(htmlFile, htmlText, Encoding.Unicode); this.htmlView.Navigate(new Uri(htmlFile)); this.htmlView.Refresh(); this.defaultHtmlView.Navigate(new Uri(htmlFile)); this.defaultHtmlView.Refresh(); }
/// <summary> /// Toes the mail message ex. /// </summary> /// <param name="entity">The entity.</param> /// <returns></returns> private MailMessageEx ToMailMessageEx(MimeEntity entity) { if (entity == null) { //throw new ArgumentNullException("entity"); return(null); } ///解析标准头文件,并建立基地的电子邮件 MailMessageEx message = MailMessageEx.CreateMailMessageFromEntity(entity); if (!string.IsNullOrEmpty(entity.ContentType.Boundary)) { message = MailMessageEx.CreateMailMessageFromEntity(entity); BuildMultiPartMessage(entity, message); }//parse multipart message into sub parts. else if (string.Equals(entity.ContentType.MediaType, MediaTypes.MessageRfc822, StringComparison.InvariantCultureIgnoreCase)) { //use the first child to create the multipart message. if (entity.Children.Count < 0) { throw new Pop3Exception("Invalid child count on message/rfc822 entity."); } //create the mail message from the first child because it will //contain all of the mail headers. The entity in this state //only contains simple content type headers indicating, disposition, type and description. //This means we can't create the mail message from this type as there is no //internet mail headers attached to this entity. message = MailMessageEx.CreateMailMessageFromEntity(entity.Children[0]); BuildMultiPartMessage(entity, message); } //parse nested message. else { message = MailMessageEx.CreateMailMessageFromEntity(entity); BuildSinglePartMessage(entity, message); } //Create single part message. return(message); }
public static List <MailMessageEx> Receive(string hostname, int port, bool useSsl, string username, string password) { using (Pop3Client client = new Pop3Client(hostname, port, useSsl, username, password)) { client.Trace += new Action <string>(Console.WriteLine); client.Authenticate(); client.Stat(); List <MailMessageEx> maillist = new List <MailMessageEx>(); MailMessageEx message = null; foreach (Pop3ListItem item in client.List()) { message = client.RetrMailMessageEx(item); if (message != null) { client.Dele(item); maillist.Add(message); } } client.Noop(); client.Rset(); client.Quit(); return(maillist); } }
/// <summary> /// Creates the mail message from entity. /// </summary> /// <param name="entity">The entity.</param> /// <returns></returns> public static MailMessageEx CreateMailMessageFromEntity(MimeEntity entity) { MailMessageEx message = new MailMessageEx(); string value; foreach (string key in entity.Headers.AllKeys) { value = entity.Headers[key]; if (value.Equals(string.Empty)) { value = " "; } message.Headers.Add(key.ToLowerInvariant(), value); switch (key.ToLowerInvariant()) { case MailHeaders.Bcc: MailMessageEx.PopulateAddressList(value, message.Bcc); break; case MailHeaders.Cc: MailMessageEx.PopulateAddressList(value, message.CC); break; case MailHeaders.From: message.From = MailMessageEx.CreateMailAddress(value); break; case MailHeaders.ReplyTo: message.ReplyTo = MailMessageEx.CreateMailAddress(value); break; case MailHeaders.Subject: message.Subject = value; break; case MailHeaders.To: MailMessageEx.PopulateAddressList(value, message.To); break; } } return message; }
/// <summary> /// Builds the single part message. /// </summary> /// <param name="entity">The entity.</param> /// <param name="message">The message.</param> private void BuildSinglePartMessage(MimeEntity entity, MailMessageEx message) { SetMessageBody(message, entity); }
/// <summary> /// Sets the message body. /// </summary> /// <param name="message">The message.</param> /// <param name="child">The child.</param> private void SetMessageBody(MailMessageEx message, MimeEntity child) { Encoding encoding = child.GetEncoding(); message.Body = DecodeBytes(child.Content.ToArray(), encoding); message.BodyEncoding = encoding; message.IsBodyHtml = string.Equals(MediaTypes.TextHtml, child.ContentType.MediaType, StringComparison.InvariantCultureIgnoreCase); }
/// <summary> /// Builds the multi part message. /// </summary> /// <param name="entity">The entity.</param> /// <param name="message">The message.</param> private void BuildMultiPartMessage(MimeEntity entity, MailMessageEx message) { foreach (MimeEntity child in entity.Children) { if (string.Equals(child.ContentType.MediaType, MediaTypes.MultipartAlternative, StringComparison.InvariantCultureIgnoreCase) || string.Equals(child.ContentType.MediaType, MediaTypes.MultipartMixed, StringComparison.InvariantCultureIgnoreCase)) { BuildMultiPartMessage(child, message); } //if the message is mulitpart/alternative or multipart/mixed then the entity will have children needing parsed. else if (!IsAttachment(child) && (string.Equals(child.ContentType.MediaType, MediaTypes.TextPlain) || string.Equals(child.ContentType.MediaType, MediaTypes.TextHtml))) { message.AlternateViews.Add(CreateAlternateView(child)); SetMessageBody(message, child); } //add the alternative views. else if (string.Equals(child.ContentType.MediaType, MediaTypes.MessageRfc822, StringComparison.InvariantCultureIgnoreCase) && string.Equals(child.ContentDisposition.DispositionType, DispositionTypeNames.Attachment, StringComparison.InvariantCultureIgnoreCase)) { message.Children.Add(ToMailMessageEx(child)); } //create a child message and else if (IsAttachment(child)) { message.Attachments.Add(CreateAttachment(child)); } } }
/// <summary> /// 获取邮件 /// </summary> public void MailPop3Client() { //Logger.Log.Info("邮件审批开始..."); //Logger.Log.Info("************************---PopServer=" + PopServer); //Logger.Log.Debug("************************---PopPort=" + PopPort); //Logger.Log.Debug("************************---User="******"************************---Pass="******"************************---UseSSL=" + UseSSL); using (Pop3Client client = new Pop3Client(PopServer, PopPort, UseSSL, User, Pass)) { //显示程序与POP3服务器的通信过程 //client.Trace += new Action<string>(Console.WriteLine); //连接POP3服务器并验证用户身份 Logger.Log.Info("Connect POP3 Server and verify..."); client.Authenticate(); Logger.Log.Info("Verify Success..."); client.Stat(); //枚举所有未读邮件 Logger.Log.Info("Mail Exist..." + client.List()); SpreadtrumLHDEntities Db = new SpreadtrumLHDEntities(); foreach (Pop3ListItem item in client.List()) { MailMessageEx message = null; try { LOTSImportSDLogs lotlogs = new LOTSImportSDLogs(); Logger.Log.Info("RetrMailMessageEx item=" + item.MessageId); message = client.RetrMailMessageEx(item); if (message.Subject.ToLower().StartsWith("[lot judgement]") //&& message.Sender.Address.ToLower() == "*****@*****.**" ) { Logger.Log.Info("RetrMailMessageEx message subject=" + message.Subject); string[] data = getLotData(message.Subject); Logger.Log.Info("RetrMailMessageEx message osat=" + data[2]); Logger.Log.Info("RetrMailMessageEx message Device=" + data[3]); Logger.Log.Info("RetrMailMessageEx message LotNO=" + data[4]); Logger.Log.Info("RetrMailMessageEx message Stage=" + data[5]); Logger.Log.Info("RetrMailMessageEx message DeliveryDate=" + message.DeliveryDate.ToString()); lotlogs.OSAT = data[2]; lotlogs.Device = data[3]; lotlogs.LotNO = data[4]; lotlogs.Stage = data[5]; lotlogs.DeliveryDate = message.DeliveryDate; lotlogs.CreateTime = DateTime.Now; lotlogs.LHDFormatStatus = "Pending"; lotlogs.LHDImportStatus = "Pending"; Db.LOTSImportSDLogs.Add(lotlogs); //Db.Set<LOTSImportSDLogs>().Attach(lotlogs); //Db.Entry(lotlogs).State = EntityState.Added; } client.Dele(item); } catch (Exception ex) { Logger.Log.Error("RetrMailMessageEx error=" + ex); //client.Dele(item); continue; } } Db.SaveChanges(); Logger.Log.Info("邮件处理完毕。"); client.Quit(); } }
/// <summary> /// 获取邮件 /// </summary> public void MailPop3Client() { //Logger.Log.Info("邮件审批开始..."); //Logger.Log.Info("************************---PopServer=" + PopServer); //Logger.Log.Debug("************************---PopPort=" + PopPort); //Logger.Log.Debug("************************---User="******"************************---Pass="******"************************---UseSSL=" + UseSSL); using (Pop3Client client = new Pop3Client(PopServer, PopPort, UseSSL, User, Pass)) { //显示程序与POP3服务器的通信过程 //client.Trace += new Action<string>(Console.WriteLine); //连接POP3服务器并验证用户身份 Logger.Log.Info("Connect POP3 Server and verify..."); client.Authenticate(); Logger.Log.Info("Verify Success..."); client.Stat(); //枚举所有未读邮件 Logger.Log.Info("Mail Exist..." + client.List()); //SpreadtrumLHDEntities Db = new SpreadtrumLHDEntities(); DbOperation dbo = new DbOperation(); foreach (Pop3ListItem item in client.List()) { MailMessageEx message = null; try { LOTSImportSDLogs lotlogs = new LOTSImportSDLogs(); Logger.Log.Info("RetrMailMessageEx item=" + item.MessageId); message = client.RetrMailMessageEx(item); if (message.Subject.ToLower().StartsWith("[lot judgement]") //&& message.Sender.Address.ToLower() == "*****@*****.**" ) { Logger.Log.Info("RetrMailMessageEx message subject=" + message.Subject); string[] data = getLotData(message.Subject); Logger.Log.Info("RetrMailMessageEx message osat=" + data[2]); Logger.Log.Info("RetrMailMessageEx message Device=" + data[3]); Logger.Log.Info("RetrMailMessageEx message LotNO=" + data[4]); Logger.Log.Info("RetrMailMessageEx message Stage=" + data[5]); Logger.Log.Info("RetrMailMessageEx message DeliveryDate=" + message.DeliveryDate.ToString()); //lotlogs.OSAT = data[2]; //lotlogs.Device = data[3]; //lotlogs.LotNO = data[4]; //lotlogs.Stage = data[5]; //lotlogs.DeliveryDate = message.DeliveryDate; //lotlogs.CreateTime = DateTime.Now; //lotlogs.LHDFormatStatus = "Pending"; //lotlogs.LHDImportStatus = "Pending"; //Db.LOTSImportSDLogs.Add(lotlogs); string insertSQL = @"INSERT INTO [dbo].[LOTSImportSDLogs] ([OSAT] ,[Device] ,[LotNO] ,[Stage] ,[DeliveryDate] ,[CreateTime] ,[LHDFormatStatus] ,[LHDImportStatus]) VALUES ('{0}' ,'{1}' ,'{2}' ,'{3}' ,'{4}' ,GETDATE() ,'Pending' ,'Pending');"; //Db.Set<LOTSImportSDLogs>().Attach(lotlogs); //Db.Entry(lotlogs).State = EntityState.Added; dbo.ExecuteNonQuery(string.Format(insertSQL, data[2], data[3], data[4], data[5], message.DeliveryDate.ToString("yyyy-MM-dd HH:mm:ss"))); } client.Dele(item); } catch (Exception ex) { Logger.Log.Error("RetrMailMessageEx error=" + ex); //client.Dele(item); continue; } } //Db.SaveChanges(); Logger.Log.Info("邮件处理完毕。"); client.Quit(); } }
/// <summary> /// Creates the mail message from entity. /// </summary> /// <param name="entity"> /// The entity. /// </param> /// <returns> /// </returns> public static MailMessageEx CreateMailMessageFromEntity(MimeEntity entity) { var message = new MailMessageEx(); foreach (string key in entity.Headers.AllKeys) { string value = entity.Headers[key]; if (value.Equals(string.Empty)) { value = " "; } message.Headers.Add(key.ToLowerInvariant(), value); switch (key.ToLowerInvariant()) { case MailHeaders.Bcc: PopulateAddressList(value, message.Bcc); break; case MailHeaders.Cc: PopulateAddressList(value, message.CC); break; case MailHeaders.From: MailAddress fromAddress; if (TryParseMailAddress(value, out fromAddress)) { message.From = fromAddress; } break; case MailHeaders.ReplyTo: PopulateAddressList(value, message.ReplyToList); break; case MailHeaders.Subject: message.Subject = DecodeIfEncoded(value); break; case MailHeaders.To: PopulateAddressList(value, message.To); break; } } return message; }
public MessageEventArgs(MailMessageEx entry) { Entry = entry; }
static void Main(string[] args) { try { string host = ConfigurationManager.AppSettings.Get("popHost"); int port = Convert.ToInt32(ConfigurationManager.AppSettings.Get("popPort")); bool useSSL = Convert.ToBoolean(ConfigurationManager.AppSettings.Get("useSSL")); string username = ConfigurationManager.AppSettings.Get("popUser"); string password = ConfigurationManager.AppSettings.Get("popPassword"); string dropPath = ConfigurationManager.AppSettings.Get("dropFolderPath"); bool traceToConsole = Convert.ToBoolean(ConfigurationManager.AppSettings.Get("traceToConsole")); bool deleteAfterRetrieve = Convert.ToBoolean(ConfigurationManager.AppSettings.Get("deleteAfterRetrieve")); TraceProvider.RegisterTraceProvider(); using (Pop3Client popClient = new Pop3Client(host, port, useSSL, username, password)) { if (traceToConsole) { popClient.Trace += new Action <string>(Console.WriteLine); } //connects to Pop3 Server, Executes POP3 USER and PASS popClient.Authenticate(); popClient.Stat(); System.Net.Mail.SmtpClient smtpClient = new System.Net.Mail.SmtpClient(); smtpClient.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.SpecifiedPickupDirectory; smtpClient.PickupDirectoryLocation = dropPath; StringBuilder traceMessage = new StringBuilder("Messages To Retrieve: " + popClient.List().Count); Console.WriteLine(traceMessage.ToString()); ULS.LogMessage("Pop Client", traceMessage.ToString(), "E-Mail", TraceProvider.TraceSeverity.InformationEvent); foreach (Pop3ListItem item in popClient.List()) { using (MailMessageEx popMessage = popClient.RetrMailMessageEx(item)) { using (System.Net.Mail.MailMessage smtpMessage = new System.Net.Mail.MailMessage()) { if (traceToConsole) { foreach (System.Net.Mail.MailAddress toAddress in popMessage.To) { Console.WriteLine("To: " + toAddress.Address); } Console.WriteLine("From: " + popMessage.From.Address); Console.WriteLine("Subject: " + popMessage.Subject); Console.WriteLine("Attachments: " + popMessage.Attachments.Count); foreach (System.Net.Mail.Attachment attachment in popMessage.Attachments) { Console.WriteLine("Attachment: " + attachment.Name); } Console.Write("Body: " + popMessage.Body + "\n"); } smtpMessage.From = popMessage.From; smtpMessage.Subject = popMessage.Subject; smtpMessage.SubjectEncoding = popMessage.SubjectEncoding; smtpMessage.Body = popMessage.Body; smtpMessage.BodyEncoding = popMessage.BodyEncoding; smtpMessage.Sender = popMessage.Sender; traceMessage = new StringBuilder("Message Processed:<br/>\n"); foreach (System.Net.Mail.MailAddress toAddress in popMessage.To) { traceMessage.Append("To: " + toAddress + "<br/>\n"); smtpMessage.To.Add(toAddress); } foreach (System.Net.Mail.MailAddress ccAddress in popMessage.CC) { traceMessage.Append("CC: " + ccAddress + "<br/>\n"); smtpMessage.CC.Add(ccAddress); } traceMessage.Append("From: " + popMessage.From.Address + "<br/>\n"); traceMessage.Append("Subject: " + popMessage.Subject + "<br/>\n"); foreach (System.Net.Mail.Attachment attachment in popMessage.Attachments) { smtpMessage.Attachments.Add(attachment); traceMessage.Append("Attachment: " + attachment.Name + "<br/>\n"); } smtpMessage.IsBodyHtml = popMessage.IsBodyHtml; foreach (string key in popMessage.Headers.AllKeys) { smtpMessage.Headers.Add(key, popMessage.Headers[key]); } ULS.LogMessage("Pop Client", traceMessage.ToString(), "E-Mail", TraceProvider.TraceSeverity.InformationEvent); smtpClient.Send(smtpMessage); if (deleteAfterRetrieve) { popClient.Dele(item); } } } } popClient.Noop(); if (!deleteAfterRetrieve) { popClient.Rset(); } popClient.Quit(); } } catch (Exception ex) { ULS.LogError("Pop Client", ex.ToString(), "E-Mail"); } TraceProvider.UnregisterTraceProvider(); }
public void StartEmailIndexing() { if (!Directory.Exists(GlobalData.EmailIndexPath)) { Directory.CreateDirectory(GlobalData.EmailIndexPath); } IndexWriter index; PerFieldAnalyzerWrapper pfaw = new PerFieldAnalyzerWrapper(new KeywordAnalyzer()); pfaw.AddAnalyzer("body", new StopAnalyzer()); try { index = new IndexWriter(GlobalData.EmailIndexPath, pfaw, false); } catch { index = new IndexWriter(GlobalData.EmailIndexPath, pfaw, true); } const string PopServer = "pop.google.in"; const int PopPort = 995; const string User = "******"; const string Pass = "******"; using (Pop3Client client = new Pop3Client(PopServer, PopPort, true, User, Pass)) { client.Trace += new Action <string>(Console.WriteLine); //connects to Pop3 Server, Executes POP3 USER and PASS client.Authenticate(); client.Stat(); foreach (Pop3ListItem item in client.List()) { Document doc = new Document(); MailMessageEx message = client.RetrMailMessageEx(item); doc.Add(new Field("subject", message.Subject.ToLower(), Field.Store.YES, Field.Index.NO_NORMS)); doc.Add(new Field("from", message.From.ToString().ToLower(), Field.Store.YES, Field.Index.NO_NORMS)); doc.Add(new Field("to", message.To.ToString().ToLower(), Field.Store.YES, Field.Index.NO_NORMS)); //doc.Add(new Field("date", message.DeliveryDate.ToLower(), Field.Store.YES, Field.Index.NO_NORMS)); string code = message.Body; code = Regex.Replace(code, @"<\s*head\s*>(.|\n|\r)*?<\s*/\s*head\s*>", " ", RegexOptions.Compiled); //repalce <head> section with single whitespace code = Regex.Replace(code, @"<\s*script (.|\n|\r)*?<\s*/\s*script\s*>", " ", RegexOptions.Compiled); //repalce remaining <script> tags from body with single whitespace code = Regex.Replace(code, @"<!--(.|\n|\r)*?-->", " ", RegexOptions.Compiled); //repalce comments code = Regex.Replace(code, @"<(.|\n|\r)*?>", " ", RegexOptions.Compiled); //repalce all tags with single whitespace code = Regex.Replace(code, @"&.*?;", " ", RegexOptions.Compiled); //replace > e.t.c code = Regex.Replace(code, @"\s+", " ", RegexOptions.Compiled); //replace multiple whitespaces characters by single whitespace code = Regex.Replace(code, @"\ufffd", " ", RegexOptions.Compiled); doc.Add(new Field("body", code.ToLower(), Field.Store.YES, Field.Index.NO_NORMS)); index.AddDocument(doc); } client.Noop(); client.Rset(); client.Quit(); index.Optimize(); index.Close(); } }