internal override void ReadResponse(Pop3ResponseReader reader) { TakeSnapshot(reader); if (IsNegative) { return; } using (var writer = new StringWriter()) { while (true) { reader.ReadNextLine(); if (reader.IsCompleted) { break; } writer.WriteLine(reader.CurrentLine.StartsWith("..") ? reader.CurrentLine.Substring(1) : reader.CurrentLine); } var text = writer.ToString(); var index = text.IndexOf(Strings.CrLf + Strings.CrLf); var entity = new Entity(); entity.Deserialize(text.Substring(0, index)); _headerFields.AddRange(entity.Headers); Lines = text.Substring(index).Trim(); } }
public static Message FromMime(string text) { var entity = new Entity(); entity.Deserialize(text); return entity.ToMessage(); }
/// <summary> /// Fetches a single message from the selected mailbox identified by its unique identifier. /// </summary> /// <param name="uid">The uid of the requested message.</param> /// <returns>The requested message.</returns> public Message FetchMessageByUid(int uid) { var query = Messages .Where(x => x.Uid == uid) .Select(x => new MessageContainer { Uid = x.Uid, SequenceNumber = x.SequenceNumber, Text = (string) x.Parts(string.Empty) }); var container = query.ToList().FirstOrDefault(); if (container != null) { var entity = new Entity(); entity.Deserialize(container.Text); var message = entity.ToMessage(); message.Uid = container.Uid; message.SequenceNumber = container.SequenceNumber; return message; } return null; }
/// <summary> /// Fetches a single nested message from the requested message. /// </summary> /// <param name="info">The associated info object, this token can be obtained from the messages body structure.</param> /// <returns>The requested nested message.</returns> public Message FetchNestedMessage(MessageInfo info) { var text = FetchEntityText(info); if (string.IsNullOrEmpty(text)) { return null; } var entity = new Entity(); entity.Deserialize(text); return entity.ToMessage(); }
private static View ParseEntity(Message message, Entity current, Entity last, View related = null) { if (current.IsMessage()) { var e = new Entity(); e.Deserialize(current.Text); var nested = e.ToMessage(); message.NestedMessages.Add(nested); return null; } if (related != null) { var attachment = current.ToRelated(); related.RelatedAttachments.Add(attachment); return related; } if (current.IsAttachment()) { var attachment = current.ToAttachment(); message.Attachments.Add(attachment); return null; } if (current.IsView() || !current.HasContentType) { var view = current.ToView(); message.Views.Add(view); if (last != null && last.IsMultipartRelated) { return view; } return null; } foreach (var child in current.Children) { // we need to pass the related view to the next sibling related = ParseEntity(message, child, current, related); } return null; }