#pragma warning disable CS8765 // Nullability of parameter 'name' doesn't match overridden member public override void Remove(string name) #pragma warning restore CS8765 { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (name.Length == 0) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(name)), nameof(name)); } MailHeaderID id = MailHeaderInfo.GetID(name); if (id == MailHeaderID.ContentType && _part != null) { _part.ContentType = null !; // this throws ArgumentNullException } else if (id == MailHeaderID.ContentDisposition && _part is MimePart) { ((MimePart)_part).ContentDisposition = null; } base.Remove(name); }
internal void Set(string contentDisposition, HeaderCollection headers) { this.disposition = contentDisposition; this.ParseValue(); headers.InternalSet(MailHeaderInfo.GetString(MailHeaderID.ContentDisposition), this.ToString()); this.isPersisted = true; }
public override void Remove(string name) { if (Logging.On) { Logging.PrintInfo(Logging.Web, this, "Remove", name); } if (name == null) { throw new ArgumentNullException("name"); } if (name == string.Empty) { throw new ArgumentException(SR.GetString("net_emptystringcall", new object[] { "name" }), "name"); } MailHeaderID iD = MailHeaderInfo.GetID(name); if ((iD == MailHeaderID.ContentType) && (this.part != null)) { this.part.ContentType = null; } else if ((iD == MailHeaderID.ContentDisposition) && (this.part is MimePart)) { ((MimePart)this.part).ContentDisposition = null; } base.Remove(name); }
internal void Set(string contentType, HeaderCollection headers) { _type = contentType; ParseValue(); headers.InternalSet(MailHeaderInfo.GetString(MailHeaderID.ContentType) !, ToString()); _isPersisted = true; }
internal void Set(string contentType, HeaderCollection headers) { this.type = contentType; this.ParseValue(); headers.InternalSet(MailHeaderInfo.GetString(MailHeaderID.ContentType), this.ToString()); this.isPersisted = true; }
public override void Remove(string name) { if (Logging.On) { Logging.PrintInfo(Logging.Web, this, "Remove", name); } if (name == null) { throw new ArgumentNullException("name"); } if (name == string.Empty) { throw new ArgumentException(SR.GetString(SR.net_emptystringcall, "name"), "name"); } MailHeaderID id = MailHeaderInfo.GetID(name); if (id == MailHeaderID.ContentType && part != null) { part.ContentType = null; } else if (id == MailHeaderID.ContentDisposition && part is MimePart) { ((MimePart)part).ContentDisposition = null; } base.Remove(name); }
public override string[] GetValues(string name) { if (Logging.On) { Logging.PrintInfo(Logging.Web, this, "Get", name); } if (name == null) { throw new ArgumentNullException("name"); } if (name == string.Empty) { throw new ArgumentException(SR.GetString(SR.net_emptystringcall, "name"), "name"); } MailHeaderID id = MailHeaderInfo.GetID(name); if (id == MailHeaderID.ContentType && part != null) { part.ContentType.PersistIfNeeded(this, false); } else if (id == MailHeaderID.ContentDisposition && part is MimePart) { ((MimePart)part).ContentDisposition.PersistIfNeeded(this, false); } return(base.GetValues(name)); }
#pragma warning disable CS8765 // Nullability of parameters 'name' and 'value' don't match overridden member public override void Add(string name, string value) #pragma warning restore CS8765 { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } if (name.Length == 0) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(name)), nameof(name)); } if (value.Length == 0) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(value)), nameof(value)); } MailBnfHelper.ValidateHeaderName(name); // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); value = value.Normalize(NormalizationForm.FormC); InternalAdd(name, value); }
#pragma warning disable CS8610 // Nullability of reference types in type of parameter doesn't match overridden member. public override string[]? GetValues(string name) #pragma warning restore CS8610 { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (name == string.Empty) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(name)), nameof(name)); } MailHeaderID id = MailHeaderInfo.GetID(name); if (id == MailHeaderID.ContentType && _part != null) { _part.ContentType.PersistIfNeeded(this, false); } else if (id == MailHeaderID.ContentDisposition && _part is MimePart) { ((MimePart)_part).ContentDisposition !.PersistIfNeeded(this, false); } return(base.GetValues(name)); }
public override void Remove(string name) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (name == string.Empty) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(name)), nameof(name)); } MailHeaderID id = MailHeaderInfo.GetID(name); if (id == MailHeaderID.ContentType && _part != null) { _part.ContentType = null; } else if (id == MailHeaderID.ContentDisposition && _part is MimePart) { ((MimePart)_part).ContentDisposition = null; } base.Remove(name); }
public override string Get(string name) { if (Logging.On) { Logging.PrintInfo(Logging.Web, this, "Get", name); } if (name == null) { throw new ArgumentNullException("name"); } if (name == string.Empty) { throw new ArgumentException(SR.GetString("net_emptystringcall", new object[] { "name" }), "name"); } MailHeaderID iD = MailHeaderInfo.GetID(name); if ((iD == MailHeaderID.ContentType) && (this.part != null)) { this.part.ContentType.PersistIfNeeded(this, false); } else if ((iD == MailHeaderID.ContentDisposition) && (this.part is MimePart)) { ((MimePart)this.part).ContentDisposition.PersistIfNeeded(this, false); } return(base.Get(name)); }
#pragma warning disable CS8765 // Nullability of parameters 'name' and 'value' don't match overridden member public override void Set(string name, string value) #pragma warning restore CS8765 { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } if (name.Length == 0) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(name)), nameof(name)); } if (value.Length == 0) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(value)), nameof(value)); } if (!MimeBasePart.IsAscii(name, false)) { throw new FormatException(SR.InvalidHeaderName); } // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); value = value.Normalize(NormalizationForm.FormC); base.Set(name, value); }
internal void PersistIfNeeded(HeaderCollection headers, bool forcePersist) { if (IsChanged || !_isPersisted || forcePersist) { headers.InternalSet(MailHeaderInfo.GetString(MailHeaderID.ContentType) !, ToString()); _isPersisted = true; } }
internal void PersistIfNeeded(HeaderCollection headers, bool forcePersist) { if ((this.IsChanged || !this.isPersisted) || forcePersist) { headers.InternalSet(MailHeaderInfo.GetString(MailHeaderID.ContentDisposition), this.ToString()); this.isPersisted = true; } }
internal void Set(string contentDisposition, HeaderCollection headers) { // we don't set ischanged because persistence was already handled // via the headers. _disposition = contentDisposition; ParseValue(); headers.InternalSet(MailHeaderInfo.GetString(MailHeaderID.ContentDisposition), ToString()); _isPersisted = true; }
internal void PrepareHeaders(bool allowUnicode) { _contentType.PersistIfNeeded((HeaderCollection)Headers, false); _headers.InternalSet(MailHeaderInfo.GetString(MailHeaderID.ContentType), _contentType.Encode(allowUnicode)); if (_contentDisposition != null) { _contentDisposition.PersistIfNeeded((HeaderCollection)Headers, false); _headers.InternalSet(MailHeaderInfo.GetString(MailHeaderID.ContentDisposition), _contentDisposition.Encode(allowUnicode)); } }
//add a new header and set its value internal void InternalAdd(string name, string value) { if (MailHeaderInfo.IsSingleton(name)) { base.Set(name, value); } else { base.Add(name, value); } }
public override void Set(string name, string value) { if (Logging.On) { Logging.PrintInfo(Logging.Web, this, "Set", name.ToString() + "=" + value.ToString()); } if (name == null) { throw new ArgumentNullException(nameof(name)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } if (name == string.Empty) { throw new ArgumentException(SR.GetString(SR.net_emptystringcall, nameof(name)), nameof(name)); } if (value == string.Empty) { throw new ArgumentException(SR.GetString(SR.net_emptystringcall, nameof(value)), nameof(value)); } if (!MimeBasePart.IsAscii(name, false)) { throw new FormatException(SR.GetString(SR.InvalidHeaderName)); } // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); MailHeaderID id = MailHeaderInfo.GetID(name); value = value.Normalize(Text.NormalizationForm.FormC); if (id == MailHeaderID.ContentType && part != null) { part.ContentType.Set(value.ToLower(CultureInfo.InvariantCulture), this); } else if (id == MailHeaderID.ContentDisposition && part is MimePart) { ((MimePart)part).ContentDisposition.Set(value.ToLower(CultureInfo.InvariantCulture), this); } else { base.Set(name, value); } }
#pragma warning disable CS8765 // Nullability of parameters 'name' and 'value' don't match overridden member public override void Add(string name, string value) #pragma warning restore CS8765 { ArgumentException.ThrowIfNullOrEmpty(name); ArgumentException.ThrowIfNullOrEmpty(value); MailBnfHelper.ValidateHeaderName(name); // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); value = value.Normalize(NormalizationForm.FormC); InternalAdd(name, value); }
public override void Set(string name, string value) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } if (name == string.Empty) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(name)), nameof(name)); } if (value == string.Empty) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(value)), nameof(name)); } if (!MimeBasePart.IsAscii(name, false)) { throw new FormatException(SR.Format(SR.InvalidHeaderName)); } // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); MailHeaderID id = MailHeaderInfo.GetID(name); // TODO https://github.com/dotnet/corefx/issues/11747: Uncomment once we can use NormalizationForm //value = value.Normalize(NormalizationForm.FormC); if (id == MailHeaderID.ContentType && _part != null) { _part.ContentType.Set(value.ToLower(CultureInfo.InvariantCulture), this); } else if (id == MailHeaderID.ContentDisposition && _part is MimePart) { ((MimePart)_part).ContentDisposition.Set(value.ToLower(CultureInfo.InvariantCulture), this); } else { base.Set(name, value); } }
#pragma warning disable CS8610 // Nullability of reference types in type of parameter doesn't match overridden member. public override void Set(string name, string value) #pragma warning restore CS8610 { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } if (name == string.Empty) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(name)), nameof(name)); } if (value == string.Empty) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(value)), nameof(value)); } if (!MimeBasePart.IsAscii(name, false)) { throw new FormatException(SR.InvalidHeaderName); } // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); MailHeaderID id = MailHeaderInfo.GetID(name); value = value.Normalize(NormalizationForm.FormC); if (id == MailHeaderID.ContentType && _part != null) { _part.ContentType.Set(value.ToLowerInvariant(), this); } else if (id == MailHeaderID.ContentDisposition && _part is MimePart) { ((MimePart)_part).ContentDisposition !.Set(value.ToLowerInvariant(), this); } else { base.Set(name, value); } }
public override void Add(string name, string value) { if (Logging.On) { Logging.PrintInfo(Logging.Web, this, "Add", name.ToString() + "=" + value.ToString()); } if (name == null) { throw new ArgumentNullException("name"); } if (value == null) { throw new ArgumentNullException("value"); } if (name == string.Empty) { throw new ArgumentException(SR.GetString(SR.net_emptystringcall, "name"), "name"); } if (value == string.Empty) { throw new ArgumentException(SR.GetString(SR.net_emptystringcall, "value"), "name"); } MailBnfHelper.ValidateHeaderName(name); // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); MailHeaderID id = MailHeaderInfo.GetID(name); value = value.Normalize(Text.NormalizationForm.FormC); if (id == MailHeaderID.ContentType && part != null) { part.ContentType.Set(value.ToLower(), this); } else if (id == MailHeaderID.ContentDisposition && part is MimePart) { ((MimePart)part).ContentDisposition.Set(value.ToLower(), this); } else { InternalAdd(name, value); } }
#pragma warning disable CS8765 // Nullability of parameters 'name' and 'value' don't match overridden member public override void Set(string name, string value) #pragma warning restore CS8765 { ArgumentException.ThrowIfNullOrEmpty(name); ArgumentException.ThrowIfNullOrEmpty(value); if (!MimeBasePart.IsAscii(name, false)) { throw new FormatException(SR.InvalidHeaderName); } // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); value = value.Normalize(NormalizationForm.FormC); base.Set(name, value); }
public override void Set(string name, string value) { if (Logging.On) { Logging.PrintInfo(Logging.Web, this, "Set", name.ToString() + "=" + value.ToString()); } if (name == null) { throw new ArgumentNullException("name"); } if (value == null) { throw new ArgumentNullException("value"); } if (name == string.Empty) { throw new ArgumentException(SR.GetString("net_emptystringcall", new object[] { "name" }), "name"); } if (value == string.Empty) { throw new ArgumentException(SR.GetString("net_emptystringcall", new object[] { "value" }), "name"); } if (!MimeBasePart.IsAscii(name, false)) { throw new FormatException(SR.GetString("InvalidHeaderName")); } name = MailHeaderInfo.NormalizeCase(name); MailHeaderID iD = MailHeaderInfo.GetID(name); if ((iD == MailHeaderID.ContentType) && (this.part != null)) { this.part.ContentType.Set(value.ToLower(CultureInfo.InvariantCulture), this); } else if ((iD == MailHeaderID.ContentDisposition) && (this.part is MimePart)) { ((MimePart)this.part).ContentDisposition.Set(value.ToLower(CultureInfo.InvariantCulture), this); } else { base.Set(name, value); } }
public override void Add(string name, string value) { if (name == null) { throw new ArgumentNullException("name"); } if (value == null) { throw new ArgumentNullException("value"); } if (name == string.Empty) { throw new ArgumentException(SR.GetString("net_emptystringcall", new object[] { "name" }), "name"); } if (value == string.Empty) { throw new ArgumentException(SR.GetString("net_emptystringcall", new object[] { "value" }), "name"); } MailBnfHelper.ValidateHeaderName(name); if (!MimeBasePart.IsAnsi(value, false)) { throw new FormatException(SR.GetString("InvalidHeaderValue")); } name = MailHeaderInfo.NormalizeCase(name); //MailHeaderID iD = MailHeaderInfo.GetID(name); //if ((iD == MailHeaderID.ContentType) && (this.part != null)) //{ // this.part.ContentType.Set(value.ToLower(CultureInfo.InvariantCulture), this); //} //else if ((iD == MailHeaderID.ContentDisposition) && (this.part is MimePart)) //{ // ((MimePart)this.part).ContentDisposition.Set(value.ToLower(CultureInfo.InvariantCulture), this); //} //else if (MailHeaderInfo.IsSingleton(name)) //{ // base.Set(name, value); //} //else //{ base.Add(name, value); //} }
#pragma warning disable CS8765 // Nullability of parameters 'name' and 'value' don't match overridden member public override void Add(string name, string value) #pragma warning restore CS8765 { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } if (name.Length == 0) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(name)), nameof(name)); } if (value.Length == 0) { throw new ArgumentException(SR.Format(SR.net_emptystringcall, nameof(value)), nameof(value)); } MailBnfHelper.ValidateHeaderName(name); // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); MailHeaderID id = MailHeaderInfo.GetID(name); value = value.Normalize(NormalizationForm.FormC); if (id == MailHeaderID.ContentType && _part != null) { _part.ContentType.Set(value.ToLowerInvariant(), this); } else if (id == MailHeaderID.ContentDisposition && _part is MimePart) { ((MimePart)_part).ContentDisposition !.Set(value.ToLowerInvariant(), this); } else { InternalAdd(name, value); } }
public override void Add(string name, string value) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (value == null) { throw new ArgumentNullException(nameof(value)); } if (name == string.Empty) { throw new ArgumentException(string.Format(Strings.net_emptystringcall, nameof(name)), nameof(name)); } if (value == string.Empty) { throw new ArgumentException(string.Format(Strings.net_emptystringcall, nameof(value)), nameof(name)); } MailBnfHelper.ValidateHeaderName(name); // normalize the case of well known headers name = MailHeaderInfo.NormalizeCase(name); MailHeaderID id = MailHeaderInfo.GetID(name); value = value.Normalize(NormalizationForm.FormC); if (id == MailHeaderID.ContentType && _part != null) { _part.ContentType.Set(value.ToLower(CultureInfo.InvariantCulture), this); } else if (id == MailHeaderID.ContentDisposition && _part is MimePart) { ((MimePart)_part).ContentDisposition.Set(value.ToLower(CultureInfo.InvariantCulture), this); } else { InternalAdd(name, value); } }
public override string Get(string name) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (name == string.Empty) { throw new ArgumentException(string.Format(Strings.net_emptystringcall, nameof(name)), nameof(name)); } MailHeaderID id = MailHeaderInfo.GetID(name); if (id == MailHeaderID.ContentType && _part != null) { _part.ContentType.PersistIfNeeded(this, false); } else if (id == MailHeaderID.ContentDisposition && _part is MimePart) { ((MimePart)_part).ContentDisposition.PersistIfNeeded(this, false); } return(base.Get(name)); }
/// <summary> /// Extract headers from the text stream into the Headers collection of the ReceivedMessage object provided. /// </summary> /// <param name="reader">TextReader providing the data stream to be parsed</param> /// <param name="messageHeaders">Collection of message headers.</param> /// <param name="rawheaders">Raw text of headers as received from server.</param> /// <returns>Returns false if no headers were found. Otherwise returns true.</returns> private static bool LoadHeaders(TextReader reader, NameValueCollection messageHeaders, StringBuilder rawheaders) { Debug.WriteLine("LoadHeaders()"); string line = null; string lastHeaderKey = null; //multiple values with the same header key will be delimited by semi-colon. //semi-colon is reserved as a special character for header encoding in RFC 2047, so this should be safe Dictionary <string, StringBuilder> headersBuilders = new Dictionary <string, StringBuilder>(StringComparer.InvariantCultureIgnoreCase); Dictionary <string, string[]> headers; Debug.WriteLine("Raw:"); while (null != (line = reader.ReadLine())) { Debug.WriteLine(line); if (rawheaders != null) { rawheaders.AppendLine(line); } //headers end with an empty line if (line == string.Empty || line.Trim() == string.Empty) { break; } //some agents malform the key: value expression so that there is no space after the colon. //for example this BlackBerry Message-ID header //Message-ID:<*****@*****.**> Regex regex = new Regex(@"^([^:]+):\s?(.*)$"); Match match = regex.Match(line); //if a line does not contain a colon it is either a continuation of a previous line or an error if (match.Success) { //split header key from RFC 2047 encoded value string headerkey = match.Groups[1].Value; string value = match.Groups[2].Value; if (!headersBuilders.ContainsKey(headerkey)) { headersBuilders.Add(headerkey, new StringBuilder(value)); } else { headersBuilders[headerkey].AppendFormat("|~|{0}", value); } lastHeaderKey = headerkey; } else { //continuation line should start with whitespace if (!string.IsNullOrEmpty(lastHeaderKey) && Regex.IsMatch(line, "^\\s")) { string h = line.TrimStart('\t', ' '); headersBuilders[lastHeaderKey].AppendFormat("|~|{0}", h); } else //error in message format, skip ahead and attempt to continue parsing { lastHeaderKey = null; continue; } } } if (headersBuilders.Count == 0) { return(false); } headers = new Dictionary <string, string[]>(headersBuilders.Count, StringComparer.InvariantCultureIgnoreCase); foreach (string key in headersBuilders.Keys) { List <string> list = new List <string>(headersBuilders[key].ToString().Split(new[] { "|~|" }, StringSplitOptions.RemoveEmptyEntries)); for (int i = 0; i < list.Count; i++) { if (string.IsNullOrEmpty(list[i])) { list.RemoveAt(i); } } headers.Add(key, list.ToArray()); } InPlaceDecodeExtendedHeaders(headers); //add decoded headers to the ReceivedMessage parameter passed in to this method. /************************************************************************** * NOTE: * The NameValueCollction in MailMessage.Headers is actually an internal Type * called HeaderCollection. HeaderCollection has different behavior for header keys * that are defined as singleton. MailHeaderMsft.IsSingleton replicates the internal * test used by HeaderCollection. */ Debug.WriteLine("Decoded:"); foreach (string key in headers.Keys) { Debug.WriteLine("Key: " + key); //I believe IsSingleton is meant to indicate that the field should occur only once in the output //headers when the message is encoded for transport. The side-effect of the implementation is that it doesn't //allow adding multiple values to a single key in the NameValueCollection. if (MailHeaderInfo.IsSingleton(key)) { //HeaderCollection will use Set internally when Add is called //need to join multiple values into a single string before adding or //the last value to be added will be the final value and the others will be lost. //therefore, components need to be combined into a single comma-separated string //before being added. string[] v = headers[key]; string value = string.Join(string.Empty, headers[key]); //HeaderCollection.Add(string,string) throws an undocumented ArgumentException when being passed //an empty string as a value. This is quite contrary to the behavior documented for NameValueCollection.Add(string,string) //which explicitly permits null and empty strings to be added. //the most common cause of this problem is a BCC: field with no value. if (value != string.Empty) { messageHeaders.Add(key, value); } } else { for (int i = 0; i < headers[key].Length; i++) { if (!string.IsNullOrEmpty(headers[key][i])) { Debug.WriteLine(key + ": " + headers[key][i]); messageHeaders.Add(key, headers[key][i]); } } } Debug.WriteLine(key + ": " + messageHeaders[key]); } return(true); }