Ejemplo n.º 1
0
 private static void OnMessageReceived(Connection connection, MailMessageEx message)
 {
     if (MessageReceived != null)
     {
         MessageReceived(connection, new MessageEventArgs(message));
     }
 }
Ejemplo n.º 2
0
 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));
                         }
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
 /// <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));
         }
     }
 }
Ejemplo n.º 5
0
 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));
         }
     }
 }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        /// <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();
        }
Ejemplo n.º 8
0
        /// <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);
        }
Ejemplo n.º 9
0
 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);
     }
 }
Ejemplo n.º 10
0
        /// <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;
        }
Ejemplo n.º 11
0
 /// <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);
 }
Ejemplo n.º 12
0
 /// <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);
 }
Ejemplo n.º 13
0
        /// <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));

                }
            }
        }
Ejemplo n.º 14
0
 /// <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);
 }
Ejemplo n.º 15
0
        /// <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();
            }
        }
Ejemplo n.º 16
0
        /// <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();
            }
        }
Ejemplo n.º 17
0
        /// <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;
        }
Ejemplo n.º 18
0
 public MessageEventArgs(MailMessageEx entry)
 {
     Entry = entry;
 }
Ejemplo n.º 19
0
        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();
        }
Ejemplo n.º 20
0
        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 &gt; 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();
            }
        }