internal void SetContentFromString(string contentString, System.Net.Mime.ContentType contentType) { Encoding aSCII; if (contentString == null) { throw new ArgumentNullException("content"); } if (this.part.Stream != null) { this.part.Stream.Close(); } if ((contentType != null) && (contentType.CharSet != null)) { aSCII = Encoding.GetEncoding(contentType.CharSet); } else if (MimeBasePart.IsAscii(contentString, false)) { aSCII = Encoding.ASCII; } else { aSCII = Encoding.GetEncoding("utf-8"); } byte[] bytes = aSCII.GetBytes(contentString); this.part.SetContent(new MemoryStream(bytes), contentType); if (MimeBasePart.ShouldUseBase64Encoding(aSCII)) { this.part.TransferEncoding = System.Net.Mime.TransferEncoding.Base64; } else { this.part.TransferEncoding = System.Net.Mime.TransferEncoding.QuotedPrintable; } }
internal void SetContentFromString(string content, Encoding?encoding, string?mediaType) { ArgumentNullException.ThrowIfNull(content); _part.Stream?.Close(); if (string.IsNullOrEmpty(mediaType)) { mediaType = MediaTypeNames.Text.Plain; } //validate the mediaType int offset = 0; try { string value = MailBnfHelper.ReadToken(mediaType, ref offset, null); if (value.Length == 0 || offset >= mediaType.Length || mediaType[offset++] != '/') { throw new ArgumentException(SR.MediaTypeInvalid, nameof(mediaType)); } value = MailBnfHelper.ReadToken(mediaType, ref offset, null); if (value.Length == 0 || offset < mediaType.Length) { throw new ArgumentException(SR.MediaTypeInvalid, nameof(mediaType)); } } catch (FormatException) { throw new ArgumentException(SR.MediaTypeInvalid, nameof(mediaType)); } ContentType contentType = new ContentType(mediaType); if (encoding == null) { if (MimeBasePart.IsAscii(content, false)) { encoding = Encoding.ASCII; } else { encoding = Encoding.GetEncoding(MimeBasePart.DefaultCharSet); } } contentType.CharSet = encoding.BodyName; byte[] buffer = encoding.GetBytes(content); _part.SetContent(new MemoryStream(buffer), contentType); if (MimeBasePart.ShouldUseBase64Encoding(encoding)) { _part.TransferEncoding = TransferEncoding.Base64; } else { _part.TransferEncoding = TransferEncoding.QuotedPrintable; } }
internal void SetContentFromString(string content, ContentType?contentType) { ArgumentNullException.ThrowIfNull(content); _part.Stream?.Close(); Encoding encoding; if (contentType != null && contentType.CharSet != null) { encoding = Text.Encoding.GetEncoding(contentType.CharSet); } else { if (MimeBasePart.IsAscii(content, false)) { encoding = Text.Encoding.ASCII; } else { encoding = Text.Encoding.GetEncoding(MimeBasePart.DefaultCharSet); } } byte[] buffer = encoding.GetBytes(content); _part.SetContent(new MemoryStream(buffer), contentType); if (MimeBasePart.ShouldUseBase64Encoding(encoding)) { _part.TransferEncoding = TransferEncoding.Base64; } else { _part.TransferEncoding = TransferEncoding.QuotedPrintable; } }
internal void EncodeHeaders(HeaderCollection headers, bool allowUnicode) { if (_headersEncoding == null) { _headersEncoding = Encoding.GetEncoding(MimeBasePart.DefaultCharSet); } System.Diagnostics.Debug.Assert(_headersEncoding != null); for (int i = 0; i < headers.Count; i++) { string headerName = headers.GetKey(i); //certain well-known values are encoded by PrepareHeaders and PrepareEnvelopeHeaders //so we can ignore them because either we encoded them already or there is no //way for the user to have set them. If a header is well known and user settable then //we should encode it here, otherwise we have already encoded it if necessary if (!MailHeaderInfo.IsUserSettable(headerName)) { continue; } string[] values = headers.GetValues(headerName); string encodedValue = string.Empty; for (int j = 0; j < values.Length; j++) { //encode if we need to if (MimeBasePart.IsAscii(values[j], false) || (allowUnicode && MailHeaderInfo.AllowsUnicode(headerName) && // EAI !MailBnfHelper.HasCROrLF(values[j]))) { encodedValue = values[j]; } else { encodedValue = MimeBasePart.EncodeHeaderValue(values[j], _headersEncoding, MimeBasePart.ShouldUseBase64Encoding(_headersEncoding), headerName.Length); } //potentially there are multiple values per key if (j == 0) { //if it's the first or only value, set will overwrite all the values assigned to that key //which is fine since we have them stored in values[] headers.Set(headerName, encodedValue); } else { //this is a subsequent key, so we must Add it since the first key will have overwritten the //other values headers.Add(headerName, encodedValue); } } } }
internal void SetContentFromString(string contentString, Encoding encoding, string mediaType) { if (contentString == null) { throw new ArgumentNullException("content"); } if (this.part.Stream != null) { this.part.Stream.Close(); } if ((mediaType == null) || (mediaType == string.Empty)) { mediaType = "text/plain"; } int offset = 0; try { if (((MailBnfHelper.ReadToken(mediaType, ref offset, null).Length == 0) || (offset >= mediaType.Length)) || (mediaType[offset++] != '/')) { throw new ArgumentException(SR.GetString("MediaTypeInvalid"), "mediaType"); } if ((MailBnfHelper.ReadToken(mediaType, ref offset, null).Length == 0) || (offset < mediaType.Length)) { throw new ArgumentException(SR.GetString("MediaTypeInvalid"), "mediaType"); } } catch (FormatException) { throw new ArgumentException(SR.GetString("MediaTypeInvalid"), "mediaType"); } ContentType contentType = new ContentType(mediaType); if (encoding == null) { if (MimeBasePart.IsAscii(contentString, false)) { encoding = Encoding.ASCII; } else { encoding = Encoding.GetEncoding("utf-8"); } } contentType.CharSet = encoding.BodyName(); byte[] bytes = encoding.GetBytes(contentString); this.part.SetContent(new MemoryStream(bytes), contentType); if (MimeBasePart.ShouldUseBase64Encoding(encoding)) { this.part.TransferEncoding = TransferEncoding.Base64; } else { this.part.TransferEncoding = TransferEncoding.QuotedPrintable; } }
internal void SetContentFromString(string contentString, ContentType contentType) { if (contentString == null) { throw new ArgumentNullException("content"); } if (part.Stream != null) { part.Stream.Close(); } Encoding encoding; if (contentType != null && contentType.CharSet != null) { encoding = Text.Encoding.GetEncoding(contentType.CharSet); } else { if (MimeBasePart.IsAscii(contentString, false)) { encoding = Text.Encoding.ASCII; } else { encoding = Text.Encoding.GetEncoding(MimeBasePart.defaultCharSet); } } byte[] buffer = encoding.GetBytes(contentString); part.SetContent(new MemoryStream(buffer), contentType); if (MimeBasePart.ShouldUseBase64Encoding(encoding)) { part.TransferEncoding = TransferEncoding.Base64; } else { part.TransferEncoding = TransferEncoding.QuotedPrintable; } }
internal void PrepareHeaders(bool sendEnvelope, bool allowUnicode) { string headerName; if (_headersEncoding == null) { _headersEncoding = Encoding.GetEncoding(MimeBasePart.DefaultCharSet); } //ContentType is written directly to the stream so remove potential user duplicate Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.ContentType) !); Headers[MailHeaderInfo.GetString(MailHeaderID.MimeVersion)] = "1.0"; // add sender to headers first so that it is written first to allow the IIS smtp svc to // send MAIL FROM with the sender if both sender and from are present headerName = MailHeaderInfo.GetString(MailHeaderID.Sender) !; if (Sender != null) { Headers.InternalAdd(headerName, Sender.Encode(headerName.Length, allowUnicode)); } else { Headers.Remove(headerName); } headerName = MailHeaderInfo.GetString(MailHeaderID.From) !; Headers.InternalAdd(headerName, From !.Encode(headerName.Length, allowUnicode)); headerName = MailHeaderInfo.GetString(MailHeaderID.To) !; if (To.Count > 0) { Headers.InternalAdd(headerName, To.Encode(headerName.Length, allowUnicode)); } else { Headers.Remove(headerName); } headerName = MailHeaderInfo.GetString(MailHeaderID.Cc) !; if (CC.Count > 0) { Headers.InternalAdd(headerName, CC.Encode(headerName.Length, allowUnicode)); } else { Headers.Remove(headerName); } headerName = MailHeaderInfo.GetString(MailHeaderID.ReplyTo) !; if (ReplyTo != null) { Headers.InternalAdd(headerName, ReplyTo.Encode(headerName.Length, allowUnicode)); } else if (ReplyToList.Count > 0) { Headers.InternalAdd(headerName, ReplyToList.Encode(headerName.Length, allowUnicode)); } else { Headers.Remove(headerName); } Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Bcc) !); if (_priority == MailPriority.High) { Headers[MailHeaderInfo.GetString(MailHeaderID.XPriority)] = "1"; Headers[MailHeaderInfo.GetString(MailHeaderID.Priority)] = "urgent"; Headers[MailHeaderInfo.GetString(MailHeaderID.Importance)] = "high"; } else if (_priority == MailPriority.Low) { Headers[MailHeaderInfo.GetString(MailHeaderID.XPriority)] = "5"; Headers[MailHeaderInfo.GetString(MailHeaderID.Priority)] = "non-urgent"; Headers[MailHeaderInfo.GetString(MailHeaderID.Importance)] = "low"; } //if the priority was never set, allow the app to set the headers directly. else if (((int)_priority) != -1) { Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.XPriority) !); Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Priority) !); Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Importance) !); } Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Date) !, MailBnfHelper.GetDateTimeString(DateTime.Now, null) !); headerName = MailHeaderInfo.GetString(MailHeaderID.Subject) !; if (!string.IsNullOrEmpty(_subject)) { if (allowUnicode) { Headers.InternalAdd(headerName, _subject); } else { Headers.InternalAdd(headerName, MimeBasePart.EncodeHeaderValue(_subject, _subjectEncoding, MimeBasePart.ShouldUseBase64Encoding(_subjectEncoding), headerName.Length)); } } else { Headers.Remove(headerName); } EncodeHeaders(_headers !, allowUnicode); }
internal void SetContentTypeName(bool allowUnicode) { if (!allowUnicode && _name != null && _name.Length != 0 && !MimeBasePart.IsAscii(_name, false)) { Encoding encoding = NameEncoding; if (encoding == null) { encoding = Encoding.GetEncoding(MimeBasePart.DefaultCharSet); } MimePart.ContentType.Name = MimeBasePart.EncodeHeaderValue(_name, encoding, MimeBasePart.ShouldUseBase64Encoding(encoding)); } else { MimePart.ContentType.Name = _name; } }
internal void EncodeHeaders(HeaderCollection headers) { if (this.headersEncoding == null) { this.headersEncoding = Encoding.GetEncoding("utf-8"); } for (int i = 0; i < headers.Count; i++) { string key = headers.GetKey(i); if (MailHeaderInfo.IsUserSettable(key)) { string[] values = headers.GetValues(key); string str2 = string.Empty; for (int j = 0; j < values.Length; j++) { if (MimeBasePart.IsAscii(values[j], false)) { str2 = values[j]; } else { str2 = MimeBasePart.EncodeHeaderValue(values[j], this.headersEncoding, MimeBasePart.ShouldUseBase64Encoding(this.headersEncoding), key.Length); } if (j == 0) { headers.Set(key, str2); } else { headers.Add(key, str2); } } } } }
internal void PrepareHeaders(bool sendEnvelope) { if (this.headersEncoding == null) { this.headersEncoding = Encoding.GetEncoding("utf-8"); } this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.ContentType)); this.Headers[MailHeaderInfo.GetString(MailHeaderID.MimeVersion)] = "1.0"; if (this.Sender != null) { this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Sender), this.Sender.Encode(MailHeaderInfo.GetString(MailHeaderID.Sender).ToString().Length)); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Sender)); } this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.From), this.From.Encode(MailHeaderInfo.GetString(MailHeaderID.From).ToString().Length)); if (this.To.Count > 0) { string str = this.To.Encode(MailHeaderInfo.GetString(MailHeaderID.To).Length); this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.To), str); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.To)); } if (this.CC.Count > 0) { this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Cc), this.CC.Encode(MailHeaderInfo.GetString(MailHeaderID.Cc).Length)); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Cc)); } if (this.ReplyTo != null) { this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.ReplyTo), this.ReplyTo.Encode(MailHeaderInfo.GetString(MailHeaderID.ReplyTo).Length)); } else if (this.ReplyToList.Count > 0) { this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.ReplyTo), this.ReplyToList.Encode(MailHeaderInfo.GetString(MailHeaderID.ReplyTo).Length)); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.ReplyTo)); } this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Bcc)); if (this.priority == MailPriority.High) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.XPriority)] = "1"; this.Headers[MailHeaderInfo.GetString(MailHeaderID.Priority)] = "urgent"; this.Headers[MailHeaderInfo.GetString(MailHeaderID.Importance)] = "high"; } else if (this.priority == MailPriority.Low) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.XPriority)] = "5"; this.Headers[MailHeaderInfo.GetString(MailHeaderID.Priority)] = "non-urgent"; this.Headers[MailHeaderInfo.GetString(MailHeaderID.Importance)] = "low"; } else if (this.priority != ~MailPriority.Normal) { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.XPriority)); this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Priority)); this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Importance)); } this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Date), MailBnfHelper.GetDateTimeString(DateTime.Now, null)); if (!string.IsNullOrEmpty(this.subject)) { this.Headers.InternalAdd(MailHeaderInfo.GetString(MailHeaderID.Subject), MimeBasePart.EncodeHeaderValue(this.subject, this.subjectEncoding, MimeBasePart.ShouldUseBase64Encoding(this.subjectEncoding), MailHeaderID.Subject.ToString().Length)); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Subject)); } this.EncodeHeaders(this.headers); }
internal void PrepareHeaders(bool sendEnvelope) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.MimeVersion)] = "1.0"; this.Headers[MailHeaderInfo.GetString(MailHeaderID.From)] = this.From.ToEncodedString(); if (this.Sender != null) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.Sender)] = this.Sender.ToEncodedString(); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Sender)); } if (this.To.Count > 0) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.To)] = this.To.ToEncodedString(); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.To)); } if (this.CC.Count > 0) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.Cc)] = this.CC.ToEncodedString(); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Cc)); } if (this.replyTo != null) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.ReplyTo)] = this.ReplyTo.ToEncodedString(); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.ReplyTo)); } if (this.priority == MailPriority.High) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.XPriority)] = "1"; this.Headers[MailHeaderInfo.GetString(MailHeaderID.Priority)] = "urgent"; this.Headers[MailHeaderInfo.GetString(MailHeaderID.Importance)] = "high"; } else if (this.priority == MailPriority.Low) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.XPriority)] = "5"; this.Headers[MailHeaderInfo.GetString(MailHeaderID.Priority)] = "non-urgent"; this.Headers[MailHeaderInfo.GetString(MailHeaderID.Importance)] = "low"; } else if (this.priority != ~MailPriority.Normal) { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.XPriority)); this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Priority)); this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Importance)); } this.Headers[MailHeaderInfo.GetString(MailHeaderID.Date)] = MailBnfHelper.GetDateTimeString(DateTime.Now, null); if ((this.subject != null) && (this.subject != string.Empty)) { this.Headers[MailHeaderInfo.GetString(MailHeaderID.Subject)] = MimeBasePart.EncodeHeaderValue(this.subject, this.subjectEncoding, MimeBasePart.ShouldUseBase64Encoding(this.subjectEncoding)); } else { this.Headers.Remove(MailHeaderInfo.GetString(MailHeaderID.Subject)); } }
public MailAddress(string address, string displayName, Encoding displayNameEncoding) { if (address == null) { throw new ArgumentNullException("address"); } if (address == string.Empty) { throw new ArgumentException(SR.GetString("net_emptystringcall", new object[] { "address" }), "address"); } this.displayNameEncoding = displayNameEncoding; this.displayName = displayName; this.ParseValue(address); if ((this.displayName != null) && (this.displayName != string.Empty)) { if ((this.displayName[0] == '"') && (this.displayName[this.displayName.Length - 1] == '"')) { this.displayName = this.displayName.Substring(1, this.displayName.Length - 2); } this.displayName = this.displayName.Trim(); } if ((this.displayName != null) && (this.displayName.Length > 0)) { if (!MimeBasePart.IsAscii(this.displayName, false) || (this.displayNameEncoding != null)) { if (this.displayNameEncoding == null) { this.displayNameEncoding = Encoding.GetEncoding("utf-8"); } this.encodedDisplayName = MimeBasePart.EncodeHeaderValue(this.displayName, this.displayNameEncoding, MimeBasePart.ShouldUseBase64Encoding(displayNameEncoding)); StringBuilder builder = new StringBuilder(); int offset = 0; MailBnfHelper.ReadQuotedString(this.encodedDisplayName, ref offset, builder, true); this.encodedDisplayName = builder.ToString(); } else { this.encodedDisplayName = this.displayName; } } }
internal void SetContentTypeName() { if (((this.name != null) && (this.name.Length != 0)) && !MimeBasePart.IsAscii(this.name, false)) { Encoding nameEncoding = this.NameEncoding; if (nameEncoding == null) { nameEncoding = Encoding.GetEncoding("utf-8"); } base.MimePart.ContentType.Name = MimeBasePart.EncodeHeaderValue(this.name, nameEncoding, MimeBasePart.ShouldUseBase64Encoding(nameEncoding)); } else { base.MimePart.ContentType.Name = this.name; } }