/// <summary> /// Initializes a new instance of the <see cref="MimeKit.MimeEntity"/> class /// based on the <see cref="MimeEntityConstructorInfo"/>. /// </summary> /// <remarks> /// Custom <see cref="MimeEntity"/> subclasses MUST implement this constructor /// in order to register it using <see cref="ParserOptions.RegisterMimeType"/>. /// </remarks> /// <param name="entity">Information used by the constructor.</param> protected MimeEntity(MimeEntityConstructorInfo entity) { if (entity == null) { throw new ArgumentNullException("entity"); } Headers = new HeaderList(entity.ParserOptions); ContentType = entity.ContentType; ContentType.Changed += ContentTypeChanged; Headers.Changed += HeadersChanged; IsInitializing = true; foreach (var header in entity.Headers) { if (entity.IsTopLevel && !header.Field.StartsWith("Content-", StringComparison.OrdinalIgnoreCase)) { continue; } Headers.Add(header); } IsInitializing = false; }
internal MimeMessage(ParserOptions options, IEnumerable <Header> headers) { addresses = new Dictionary <string, InternetAddressList> (icase); Headers = new HeaderList(options); // initialize our address lists foreach (var name in StandardAddressHeaders) { var list = new InternetAddressList(); list.Changed += InternetAddressListChanged; addresses.Add(name, list); } references = new MessageIdList(); references.Changed += ReferencesChanged; inreplyto = null; Headers.Changed += HeadersChanged; // add all of our message headers... foreach (var header in headers) { if (header.Field.StartsWith("Content-", StringComparison.OrdinalIgnoreCase)) { continue; } Headers.Add(header); } }
/// <summary> /// Asynchronously parses a list of headers from the stream. /// </summary> /// <remarks> /// Parses a list of headers from the stream. /// </remarks> /// <returns>The parsed list of headers.</returns> /// <param name="cancellationToken">The cancellation token.</param> /// <exception cref="System.OperationCanceledException"> /// The operation was canceled via the cancellation token. /// </exception> /// <exception cref="System.FormatException"> /// There was an error parsing the headers. /// </exception> /// <exception cref="System.IO.IOException"> /// An I/O error occurred. /// </exception> public async Task <HeaderList> ParseHeadersAsync(CancellationToken cancellationToken = default(CancellationToken)) { state = MimeParserState.Headers; if (await StepAsync(cancellationToken).ConfigureAwait(false) == MimeParserState.Error) { throw new FormatException("Failed to parse headers."); } state = eos ? MimeParserState.Eos : MimeParserState.Complete; var parsed = new HeaderList(options); foreach (var header in headers) { parsed.Add(header); } return(parsed); }
/// <summary> /// Initializes a new instance of the <see cref="MimeKit.MimeEntity"/> class /// based on the <see cref="MimeEntityConstructorArgs"/>. /// </summary> /// <remarks> /// Custom <see cref="MimeEntity"/> subclasses MUST implement this constructor /// in order to register it using <see cref="ParserOptions.RegisterMimeType"/>. /// </remarks> /// <param name="args">Information used by the constructor.</param> /// <exception cref="System.ArgumentNullException"> /// <paramref name="args"/> is <c>null</c>. /// </exception> protected MimeEntity(MimeEntityConstructorArgs args) { if (args == null) { throw new ArgumentNullException("args"); } Headers = new HeaderList(args.ParserOptions); ContentType = args.ContentType; ContentType.Changed += ContentTypeChanged; Headers.Changed += HeadersChanged; foreach (var header in args.Headers) { if (args.IsTopLevel && !header.Field.StartsWith("Content-", StringComparison.OrdinalIgnoreCase)) { continue; } Headers.Add(header); } }