示例#1
0
        /// <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;
        }
示例#2
0
        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);
            }
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
            }
        }