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()); }
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); } }
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); } } } } }
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); } }
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); } } } } }
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); } }