Exemplo n.º 1
0
        public override void Parse(ref IList <MIMER.RFC822.Field> fields, ref string fieldString)
        {
            CompilePattern();

            DecoratedFieldParser.Parse(ref fields, ref fieldString);

            foreach (RFC822.Field field in fields)
            {
                if (m_EncodedWordPattern.RegularExpression.IsMatch(field.Body))
                {
                    string charset  = m_CharsetPattern.RegularExpression.Match(field.Body).Value;
                    string text     = m_EncodedTextPattern.RegularExpression.Match(field.Body).Value;
                    string encoding = m_EncodingPattern.RegularExpression.Match(field.Body).Value;

                    Encoding enc = Encoding.GetEncoding(charset);

                    byte[] bytes;

                    if (m_QPDecoder.CanDecode(encoding))
                    {
                        bytes = m_QPDecoder.Decode(ref text, charset);
                    }
                    else
                    {
                        bytes = m_B64decoder.Decode(ref text);
                    }
                    text = enc.GetString(bytes);

                    field.Body = Regex.Replace(field.Body,
                                               m_EncodedWordPattern.TextPattern, text);
                    field.Body = field.Body.Replace('_', ' ');
                }
            }
        }
Exemplo n.º 2
0
        public override void Parse(ref IList <RFC822.Field> fields, ref string fieldString)
        {
            DecoratedFieldParser.Parse(ref fields, ref fieldString);
            MatchCollection matches = m_ContentTransferPattern.RegularExpression.Matches(fieldString);

            foreach (Match match in matches)
            {
                Match enc;
                ContentTransferEncodingField tmpTransfer = new ContentTransferEncodingField();
                enc = m_MechanismPattern.RegularExpression.Match(match.Value);
                tmpTransfer.Name     = "Content-Transfer-Encoding";
                tmpTransfer.Encoding = enc.Value;
                fields.Add(tmpTransfer);
            }
        }
Exemplo n.º 3
0
        public override void Parse(ref IList <Field> fields, ref string fieldString)
        {
            DecoratedFieldParser.Parse(ref fields, ref fieldString);

            var smimeFields = from field in fields
                              where field is ContentTypeField &&
                              !string.IsNullOrEmpty(((ContentTypeField)field).Parameters["smime-type"])
                              select new SMIMETypeField(field as ContentTypeField);


            foreach (var smimeTypeField in smimeFields.ToList())
            {
                fields.Add(smimeTypeField);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Parses the any content type fields found within argument fieldstring.
        /// </summary>
        /// <param name="fields">The target list for the parsed fields.</param>
        /// <param name="fieldString">The source field string</param>
        public override void Parse(ref IList <RFC822.Field> fields, ref string fieldString)
        {
            CompilePattern();

            if (fields.Count == 0)
            {
                DecoratedFieldParser.Parse(ref fields, ref fieldString);
            }

            MatchCollection matches = m_ContentPattern.RegularExpression.Matches(fieldString);

            foreach (Match match in matches)
            {
                ContentTypeField tmpContent = new ContentTypeField();
                tmpContent.Name = "Content-Type";
                MatchCollection parameters;
                string          key, val;

                Match tmpMatch = Regex.Match(match.Value, ":.+");

                tmpContent.Body    = tmpMatch.Value.TrimStart(new char[] { ':' });
                tmpMatch           = m_TypePattern.RegularExpression.Match(match.Value);
                tmpContent.Type    = tmpMatch.Value;
                tmpMatch           = SubTypePattern.RegularExpression.Match(match.Value);
                tmpContent.SubType = tmpMatch.Value;
                parameters         = m_ParameterPattern.RegularExpression.Matches(match.Value);
                foreach (Match m in parameters)
                {
                    tmpMatch = Regex.Match(m.Value, m_TokenPattern.TextPattern + "=");
                    key      = tmpMatch.Value.TrimEnd(new char[] { '=' });
                    tmpMatch = Regex.Match(m.Value, "(?<==)" + m_ValuePattern.TextPattern);
                    val      = tmpMatch.Value.Trim(new char[] { '\\', '"' });
                    AddParamerter(tmpContent.Parameters, key, val);
                }

                fields.Add(tmpContent);
            }
        }
Exemplo n.º 6
0
 public override void CompilePattern()
 {
     DecoratedFieldParser.CompilePattern();
 }