Exemplo n.º 1
0
        private string CreateEntity(ref Stream dataStream, ref IMultipartEntity parent, out IEntity entity)
        {
            entity = null;
            IList <RFC822.Field> fields;
            int cause = ParseFields(ref dataStream, out fields);

            if (cause >= 0)
            {
                foreach (RFC822.Field contentField in fields)
                {
                    if (contentField is ContentTypeField)
                    {
                        ContentTypeField contentTypeField = contentField as ContentTypeField;

                        if (m_CompositePattern.RegularExpression.IsMatch(contentTypeField.Type))
                        {
                            MultipartEntity mEntity = new MultipartEntity();
                            mEntity.Fields = fields;
                            entity         = mEntity;
                            entity.Parent  = parent;
                            parent.BodyParts.Add(entity);

                            if (Regex.IsMatch(contentTypeField.Type, "(?i)message") &&
                                Regex.IsMatch(contentTypeField.SubType, "(?i)rfc822"))
                            {
                                Message message = new Message();
                                IList <RFC822.Field> messageFields;
                                cause          = ParseFields(ref dataStream, out messageFields);
                                message.Fields = messageFields;
                                mEntity.BodyParts.Add(message);
                                message.Parent = mEntity;
                                if (cause > 0)
                                {
                                    return(ParseMessage(ref dataStream, ref message, messageFields));
                                }
                                break;
                            }

                            mEntity.Delimiter = ReadDelimiter(ref contentTypeField);
                            return(parent.Delimiter);
                        }

                        if (m_DiscretePattern.RegularExpression.IsMatch(contentTypeField.Type))
                        {
                            entity        = new Entity();
                            entity.Fields = fields;
                            entity.Parent = parent;
                            parent.BodyParts.Add(entity);
                            return(parent.Delimiter);
                        }
                    }
                }
            }
            return(string.Empty);
        }
Exemplo n.º 2
0
        private void LoadBody(IEntity parent)
        {
            if (parent is MultipartEntity)
            {
                MultipartEntity mpe = parent as MultipartEntity;

                mpe.BodyParts
                .Where(child => child != parent && !(child is Message))
                .ToList()
                .ForEach(LoadBody);
            }



            ContentTypeField        contentTypeField        = null;
            ContentDispositionField contentDispositionField = null;

            foreach (RFC822.Field field in parent.Fields)
            {
                if (field is ContentTypeField)
                {
                    ContentTypeField contentField = field as ContentTypeField;
                    if (contentField.Type.ToLower().Equals("text"))
                    {
                        contentTypeField = contentField;
                    }
                }

                if (field is ContentDispositionField)
                {
                    contentDispositionField = field as ContentDispositionField;
                }
            }

            if (contentTypeField != null &&
                (contentDispositionField == null ||
                 contentDispositionField.Disposition.ToLower().Equals("inline")))
            {
                string text = string.Empty;
                if (parent.Encoding != null)
                {
                    if (parent.Body != null)
                    {
                        text = parent.Encoding.GetString(parent.Body);
                    }
                }
                else
                {
                    text = ToString(parent.Body);
                }

                string key = GetKey(contentTypeField);
                m_Body.Add(key, text);
            }
        }
Exemplo n.º 3
0
 private void LoadAttachments(IEntity parent)
 {
     if (parent is MultipartEntity)
     {
         MultipartEntity mpe = parent as MultipartEntity;
         foreach (Entity entity in mpe.BodyParts)
         {
             if (entity is MultipartEntity && !(entity is Message))
             {
                 LoadAttachments(entity);
             }
             else if ((!(entity is MultipartEntity) && !(entity is Message)) || entity.IsAttachment())
             {
                 m_Attachments.Add(entity.AsAttachment());
             }
         }
     }
 }
Exemplo n.º 4
0
 private void LoadMessages(IEntity parent)
 {
     if (parent is MultipartEntity)
     {
         MultipartEntity mpe = parent as MultipartEntity;
         foreach (Entity child in mpe.BodyParts)
         {
             if (child is MultipartEntity && !(child is Message))
             {
                 LoadMessages(child);
             }
             else if (child is Message)
             {
                 ContentDispositionField field = child.GetDispositionField();
                 if (field == null || !(field.IsAttachment() && field.IsInline()))
                 {
                     m_Messages.Add(child as Message);
                 }
             }
         }
     }
 }
Exemplo n.º 5
0
        private string CreateEntity(ref Stream dataStream, ref IMultipartEntity parent, out IEntity entity)
        {
            entity = null;
            IList<RFC822.Field> fields;
            int cause = ParseFields(ref dataStream, out fields);
            if (cause >= 0)
            {
                foreach (RFC822.Field contentField in fields)
                {
                    if (contentField is ContentTypeField)
                    {
                        ContentTypeField contentTypeField = contentField as ContentTypeField;

                        if (m_CompositePattern.RegularExpression.IsMatch(contentTypeField.Type))
                        {
                            MultipartEntity mEntity = new MultipartEntity();
                            mEntity.Fields = fields;
                            entity = mEntity;
                            entity.Parent = parent;
                            parent.BodyParts.Add(entity);

                            if (Regex.IsMatch(contentTypeField.Type, "(?i)message") &&
                                Regex.IsMatch(contentTypeField.SubType, "(?i)rfc822"))
                            {
                                Message message = new Message();
                                IList<RFC822.Field> messageFields;
                                cause = ParseFields(ref dataStream, out messageFields);
                                message.Fields = messageFields;
                                mEntity.BodyParts.Add(message);
                                message.Parent = mEntity;
                                if(cause > 0)
                                    return ParseMessage(ref dataStream, ref message, messageFields);
                                break;
                            }

                            mEntity.Delimiter = ReadDelimiter(ref contentTypeField);
                            return parent.Delimiter;
                        }

                        if (m_DiscretePattern.RegularExpression.IsMatch(contentTypeField.Type))
                        {
                            entity = new Entity();
                            entity.Fields = fields;
                            entity.Parent = parent;
                            parent.BodyParts.Add(entity);
                            return parent.Delimiter;
                        }
                    }
                }
            }
            return string.Empty;
        }