public MimeMessage (params object[] args) : this (ParserOptions.Default.Clone ())
{
if (args == null)
throw new ArgumentNullException (nameof (args));
MimeEntity body = null;
foreach (object obj in args) {
if (obj == null)
continue;
// Just add the headers and let the events (already setup) keep the
// addresses in sync.
var header = obj as Header;
if (header != null) {
if (!header.Field.StartsWith ("Content-", StringComparison.OrdinalIgnoreCase))
Headers.Add (header);
continue;
}
var headers = obj as IEnumerable<Header>;
if (headers != null) {
foreach (var h in headers) {
if (!h.Field.StartsWith ("Content-", StringComparison.OrdinalIgnoreCase))
Headers.Add (h);
}
continue;
}
var entity = obj as MimeEntity;
if (entity != null) {
if (body != null)
throw new ArgumentException ("Message body should not be specified more than once.");
body = entity;
continue;
}
throw new ArgumentException ("Unknown initialization parameter: " + obj.GetType ());
}
if (body != null)
Body = body;
// Do exactly as in the parameterless constructor but avoid setting a default
// value if an header already provided one.
if (!Headers.Contains (HeaderId.From))
Headers[HeaderId.From] = string.Empty;
if (date == default (DateTimeOffset))
Date = DateTimeOffset.Now;
if (!Headers.Contains (HeaderId.Subject))
Subject = string.Empty;
if (messageId == null)
MessageId = MimeUtils.GenerateMessageId ();
}