Beispiel #1
0
        public static IAttachment AsAttachment(this IEntity entity)
        {
            ContentDispositionField dispositionField = entity.FindField <ContentDispositionField>();
            ContentTypeField        contentTypeField = entity.FindField <ContentTypeField>();

            if (dispositionField == null && contentTypeField == null)
            {
                return(new NullAttachment());
            }

            if (contentTypeField != null)
            {
                IAttachment attachment = new Attachment();

                if (dispositionField != null)
                {
                    attachment.Disposition = dispositionField.Disposition;
                }

                attachment.Name    = entity.GetAttachmentName();
                attachment.Data    = entity.Body;
                attachment.Type    = contentTypeField.Type;
                attachment.SubType = contentTypeField.SubType;
                return(attachment);
            }

            return(new NullAttachment());
        }
Beispiel #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);
            }
        }
Beispiel #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))
                    {
                        ContentDispositionField dispositionField = null;
                        ContentTypeField        contentTypeField = null;

                        foreach (RFC822.Field field in entity.Fields)
                        {
                            if (field is RFC2183.ContentDispositionField)
                            {
                                dispositionField = field as ContentDispositionField;
                            }

                            if (field is ContentTypeField)
                            {
                                contentTypeField = field as ContentTypeField;
                            }
                        }

                        if (dispositionField != null && contentTypeField != null)
                        {
                            IAttachment attachment = new Attachment();
                            attachment.Disposition = dispositionField.Disposition;
                            attachment.Name        = dispositionField.Parameters["filename"];
                            attachment.Data        = entity.Body;
                            attachment.Type        = contentTypeField.Type;
                            attachment.SubType     = contentTypeField.SubType;
                            m_Attachments.Add(attachment);
                        }
                    }
                }
            }
        }
Beispiel #4
0
        private void LoadBody(Entity parent)
        {
            if (parent is MultipartEntity)
            {
                MultipartEntity mpe = parent as MultipartEntity;
                foreach (Entity child in mpe.BodyParts)
                {
                    if (child != parent && !(child is Message))
                    {
                        LoadBody(child);
                    }
                }
            }

            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 = ToString(parent.Body);
                m_Body.Add(contentTypeField.Type + "/" + contentTypeField.SubType,
                           text);
            }
        }
Beispiel #5
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);
                 }
             }
         }
     }
 }
Beispiel #6
0
        public void ParseTest()
        {
            IList <MIMER.RFC822.Field> fields = new List <MIMER.RFC822.Field>();

            MIMER.RFC2183.ContentDispositionFieldParser parser =
                new ContentDispositionFieldParser(
                    new ExtendedFieldParser(
                        new ContentTransferEncodingFieldParser(new ContentTypeFieldParser(new FieldParser()))));
            parser.CompilePattern();
            IPattern unfoldPattern = PatternFactory.GetInstance().Get(typeof(UnfoldPattern));

            m_Fields = unfoldPattern.RegularExpression.Replace(m_Fields, " ");
            parser.Parse(ref fields, ref m_Fields);
            Assert.AreEqual(5, fields.Count);
            ContentDispositionField field = fields[4] as ContentDispositionField;

            Assert.IsNotNull(field);
            Assert.AreEqual("attachment", field.Disposition);
            Assert.AreEqual(2, field.Parameters.Count);
            Assert.AreEqual("genome.jpeg", field.Parameters["filename"]);
            Assert.AreEqual("Wed, 12 Feb 1997 16:29:51 -0500", field.Parameters["modification-date"]);
        }
        public override void Parse(ref IList<MIMER.RFC822.Field> fields, ref string fieldString)
        {
            if (fields.Count == 0)
            {
                DecoratedFieldParser.Parse(ref fields, ref fieldString);
            }

            IList<RFC822.Field> tmpFields = new List<RFC822.Field>();

            foreach(RFC822.Field field in fields)
            {
                if(field.Name.Equals("Content-Disposition"))
                {
                    Match typeMatch, tmpMatch;
                    string key, val;

                    typeMatch = m_DispositionTypePattern.RegularExpression.Match(field.Body);
                    MatchCollection parameterMatches = m_DispositionPattern.RegularExpression.Matches(field.Body);

                    ContentDispositionField dispositionField = new ContentDispositionField();
                    dispositionField.Name = field.Name;
                    dispositionField.Body = field.Body;
                    dispositionField.Disposition = typeMatch.Value;

                    foreach(Match parameterMatch in parameterMatches)
                    {
                        tmpMatch = Regex.Match(parameterMatch.Value, m_TokenPattern.TextPattern + "=");
                        key = tmpMatch.Value.TrimEnd(new char[] { '=' });
                        tmpMatch = Regex.Match(parameterMatch.Value, "(?<==)" + m_ValuePattern.TextPattern);
                        val = tmpMatch.Value.Trim(new char[] { '\\', '"' });
                        dispositionField.Parameters.Add(key, val);
                    }
                    tmpFields.Add(dispositionField);
                }
            }

            foreach (RFC822.Field field in tmpFields)
            {
                fields.Add(field);
            }
        }