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('_', ' '); } } }
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); } }
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); } }
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); } }
/// <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); } }
public override void CompilePattern() { DecoratedFieldParser.CompilePattern(); }