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); }
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)) || entity.IsAttachment()) { m_Attachments.Add(entity.AsAttachment()); } } } }
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); } } } } }
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; }