/// <summary> /// Writes the <see cref="MimeKit.HeaderList"/> to the specified output stream. /// </summary> /// <remarks> /// Writes all of the headers to the output stream. /// </remarks> /// <param name="options">The formatting options.</param> /// <param name="stream">The output stream.</param> /// <param name="cancellationToken">A cancellation token.</param> /// <exception cref="System.ArgumentNullException"> /// <para><paramref name="options"/> is <c>null</c>.</para> /// <para>-or-</para> /// <para><paramref name="stream"/> is <c>null</c>.</para> /// </exception> /// <exception cref="System.OperationCanceledException"> /// The operation was canceled via the cancellation token. /// </exception> /// <exception cref="System.IO.IOException"> /// An I/O error occurred. /// </exception> public void WriteTo(FormatOptions options, Stream stream, CancellationToken cancellationToken = default(CancellationToken)) { if (options == null) { throw new ArgumentNullException("options"); } if (stream == null) { throw new ArgumentNullException("stream"); } cancellationToken.ThrowIfCancellationRequested(); using (var filtered = new FilteredStream(stream)) { filtered.Add(options.CreateNewLineFilter()); foreach (var header in headers) { cancellationToken.ThrowIfCancellationRequested(); var name = Encoding.ASCII.GetBytes(header.Field); filtered.Write(name, 0, name.Length); filtered.WriteByte((byte)':'); filtered.Write(header.RawValue, 0, header.RawValue.Length); } filtered.Flush(); } }
/// <summary> /// Writes the message to the specified stream. /// </summary> /// <param name="options">The formatting options.</param> /// <param name="stream">The stream.</param> /// <exception cref="System.ArgumentNullException"> /// <para><paramref name="options"/> is <c>null</c>.</para> /// <para>-or-</para> /// <para><paramref name="stream"/> is <c>null</c>.</para> /// </exception> public void WriteTo(FormatOptions options, Stream stream) { if (options == null) { throw new ArgumentNullException("options"); } if (stream == null) { throw new ArgumentNullException("stream"); } if (!Headers.Contains("Date")) { Date = DateTimeOffset.Now; } if (messageId == null) { MessageId = MimeUtils.GenerateMessageId(); } if (version == null && Body != null && Body.Headers.Count > 0) { MimeVersion = new Version(1, 0); } if (Body == null) { Headers.WriteTo(stream); stream.Write(options.NewLineBytes, 0, options.NewLineBytes.Length); } else { using (var filtered = new FilteredStream(stream)) { filtered.Add(options.CreateNewLineFilter()); foreach (var header in MergeHeaders()) { var name = Encoding.ASCII.GetBytes(header.Field); filtered.Write(name, 0, name.Length); filtered.WriteByte((byte)':'); filtered.Write(header.RawValue, 0, header.RawValue.Length); } filtered.Flush(); } options.WriteHeaders = false; Body.WriteTo(options, stream); } }