Je vyžadována podpora jazyka JavaScript
Některé stránky na tomto webu vyžadují podporu jazyka JavaScript. Váš webový prohlížeč jazyk JavaScript nepodporuje nebo jazyk JavaScript není povolen.
Chcete-li zjistit, zda webový prohlížeč podporuje jazyk JavaScript nebo jazyk JavaScript chcete povolit, přečtěte si nápovědu k vašemu webovému prohlížeči.
MailDefinition.cs
Download fileToto je zdrojový kód souboru MailDefinition.cs
Class for creating or sending email messages based on text or HTML template.
using System; using System.IO; using System.Linq; using System.Net.Mail; using System.Net.Configuration; using System.Collections.Generic; using System.Text.RegularExpressions; namespace IMP.Shared { /// <summary> /// Třída pro vytvoření nebo odeslání emailové zprávy pro šablonu /// </summary> /// <remarks> /// <para>Pro odeslání zprávy je nutné provést nastavení parametrů SMTP klienta v app nebo web.config souboru aplikace.</para> /// </remarks> /// <example> /// <para>Příklad konfigurace parametrů pro odesílání emailů:</para> /// <code> /// <system.net> /// <mailSettings> /// <smtp deliveryMethod="Network" from="noreply@domena.cz"> /// <network /// host="localhost" /// port="25" /// defaultCredentials="false" /// /> /// </smtp> /// </mailSettings> /// </system.net> /// </code> /// </example> internal class MailDefinition { #region member types definition private enum EmailReplacementType { From, To, CC, Bcc } #endregion #region member varible and default property initialization [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public string BodyFileName { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public string From { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public string CC { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public string Bcc { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public string Subject { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public bool IsBodyHtml { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public MailPriority Priority { get; set; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public System.Globalization.CultureInfo Culture { get; set; } private List<EmbeddedMailObject> m_EmbeddedObjects; #endregion #region action methods [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public MailMessage CreateMailMessage(string recipients, ReplacementCollection replacements) { return CreateMailMessage((string)null, recipients, replacements, null); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public MailMessage CreateMailMessage(string recipients, ReplacementCollection replacements, IEnumerable<Attachment> attachments) { return CreateMailMessage((string)null, recipients, replacements, attachments); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public MailMessage CreateMailMessage(string body, string recipients, ReplacementCollection replacements) { return CreateMailMessage(body, recipients, replacements, null); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public MailMessage CreateMailMessage(string body, string recipients, ReplacementCollection replacements, IEnumerable<Attachment> attachments) { if (body == null && !string.IsNullOrEmpty(this.BodyFileName)) { body = File.ReadAllText(GetBodyFileNameForCulture()); } string from = this.From; if (string.IsNullOrEmpty(from)) { from = GetDefaultFrom(); } from = ApplyReplacements(from, replacements); if (recipients != null) { recipients = ApplyEmailReplacement(ApplyReplacements(recipients.Replace(';', ','), replacements), from, EmailReplacementType.From); } string cc = this.CC; if (cc != null) { cc = ApplyEmailReplacement(ApplyReplacements(cc.Replace(';', ','), replacements), from, EmailReplacementType.From); } string bcc = this.Bcc; if (bcc != null) { bcc = ApplyEmailReplacement(ApplyReplacements(bcc.Replace(';', ','), replacements), from, EmailReplacementType.From); } if (!string.IsNullOrEmpty(body)) { //Body replacements body = ApplyReplacements(body, replacements, this.IsBodyHtml); body = ApplyEmailReplacement(body, from, EmailReplacementType.From, this.IsBodyHtml); body = ApplyEmailReplacement(body, recipients, EmailReplacementType.To, this.IsBodyHtml); body = ApplyEmailReplacement(body, cc, EmailReplacementType.CC, this.IsBodyHtml); body = ApplyEmailReplacement(body, bcc, EmailReplacementType.Bcc, this.IsBodyHtml); } var message = new MailMessage() { From = new MailAddress(from), IsBodyHtml = this.IsBodyHtml, Priority = this.Priority }; try { foreach (var address in ParseRecipients(recipients)) { message.To.Add(address); } foreach (var address in ParseRecipients(cc)) { message.CC.Add(address); } foreach (var address in ParseRecipients(bcc)) { message.Bcc.Add(address); } string subject = this.Subject; if (string.IsNullOrEmpty(subject) && this.IsBodyHtml) { subject = ExtractSubjectFromHtmlBody(body); } if (!string.IsNullOrEmpty(subject)) { //Subject replacements subject = ApplyReplacements(subject, replacements); subject = ApplyEmailReplacement(subject, from, EmailReplacementType.From); subject = ApplyEmailReplacement(subject, recipients, EmailReplacementType.To); subject = ApplyEmailReplacement(subject, cc, EmailReplacementType.CC); subject = ApplyEmailReplacement(subject, bcc, EmailReplacementType.Bcc); message.Subject = subject; } if (m_EmbeddedObjects != null && m_EmbeddedObjects.Count != 0) { message.AlternateViews.Add(GetAlternateView(body)); } else if (!string.IsNullOrEmpty(body)) { message.Body = body; } if (attachments != null) { foreach (var attachment in attachments) { message.Attachments.Add(attachment); } } } catch { message.Dispose(); throw; } return message; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public MailMessage CreateMailMessage(Stream body, string recipients, ReplacementCollection replacements) { return CreateMailMessage(body, recipients, replacements, null); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public MailMessage CreateMailMessage(Stream body, string recipients, ReplacementCollection replacements, IEnumerable<Attachment> attachments) { string bodyText = null; if (body != null) { using (var reader = new StreamReader(body)) { bodyText = reader.ReadToEnd(); } } return CreateMailMessage(bodyText, recipients, replacements, attachments); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void Send(string recipients, ReplacementCollection replacements) { using (var msg = CreateMailMessage((string)null, recipients, replacements, null)) { var client = new SmtpClient(); client.Send(msg); } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void Send(string recipients, ReplacementCollection replacements, IEnumerable<Attachment> attachments) { using (var msg = CreateMailMessage((string)null, recipients, replacements, attachments)) { var client = new SmtpClient(); client.Send(msg); } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void Send(string body, string recipients, ReplacementCollection replacements) { using (var msg = CreateMailMessage(body, recipients, replacements, null)) { var client = new SmtpClient(); client.Send(msg); } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void Send(string body, string recipients, ReplacementCollection replacements, IEnumerable<Attachment> attachments) { using (var msg = CreateMailMessage(body, recipients, replacements, attachments)) { var client = new SmtpClient(); client.Send(msg); } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void Send(Stream body, string recipients, ReplacementCollection replacements) { using (var msg = CreateMailMessage(body, recipients, replacements, null)) { var client = new SmtpClient(); client.Send(msg); } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void Send(Stream body, string recipients, ReplacementCollection replacements, IEnumerable<Attachment> attachments) { using (var msg = CreateMailMessage(body, recipients, replacements, attachments)) { var client = new SmtpClient(); client.Send(msg); } } #endregion #region property getters/setters [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public List<EmbeddedMailObject> EmbeddedObjects { get { if (m_EmbeddedObjects == null) { m_EmbeddedObjects = new List<EmbeddedMailObject>(); } return m_EmbeddedObjects; } set { m_EmbeddedObjects = value; } } #endregion #region private member functions private static string ApplyReplacements(string str, ReplacementCollection replacements, bool IsHtml) { if (!string.IsNullOrEmpty(str) && replacements != null) { foreach (var Item in replacements) { string Name = Item.Name.StartsWith("<%", StringComparison.Ordinal) ? Item.Name : "<%" + Item.Name + "%>"; string Value = Item.Value ?? ""; if (IsHtml) { if (Item.HtmlEncoding) { Value = Regex.Replace(System.Web.HttpUtility.HtmlEncode(Value), "\r\n|\r|\n", "<br />"); } str = Regex.Replace(str, System.Web.HttpUtility.HtmlEncode(Name), Value, RegexOptions.IgnoreCase); } str = Regex.Replace(str, Name, Value, RegexOptions.IgnoreCase); } } return str; } private static string ApplyReplacements(string str, ReplacementCollection replacements) { return ApplyReplacements(str, replacements, false); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveComplexity")] private static string ApplyEmailReplacement(string str, string addresses, EmailReplacementType type, bool isHtml) { if (!string.IsNullOrEmpty(str)) { switch (type) { case EmailReplacementType.From: MailAddress from = null; if (addresses != null) { from = new MailAddress(addresses); } str = Regex.Replace(str, "<%From%>", from == null ? "" : from.Address, RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%FromDisplayName%>", from == null ? "" : string.IsNullOrEmpty(from.DisplayName) ? from.Address : from.DisplayName, RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%FromFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%FromFullAddress%>", addresses ?? "", RegexOptions.IgnoreCase); if (isHtml) { str = Regex.Replace(str, "<%From%>", from == null ? "" : from.Address, RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%FromDisplayName%>", from == null ? "" : string.IsNullOrEmpty(from.DisplayName) ? from.Address : from.DisplayName, RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%FromFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%FromFullAddress%>", addresses ?? "", RegexOptions.IgnoreCase); } break; case EmailReplacementType.To: var to = ParseRecipients(addresses); str = Regex.Replace(str, "<%Recipients%>", string.Join(",", (from i in to select i.Address).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%RecipientsDisplayName%>", string.Join(",", (from i in to select string.IsNullOrEmpty(i.DisplayName) ? i.Address : i.DisplayName).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%RecipientsFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%RecipientsAddress%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%To%>", string.Join(",", (from i in to select i.Address).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%ToDisplayName%>", string.Join(",", (from i in to select string.IsNullOrEmpty(i.DisplayName) ? i.Address : i.DisplayName).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%ToFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%ToFullAddress%>", addresses ?? "", RegexOptions.IgnoreCase); if (isHtml) { str = Regex.Replace(str, "<%Recipients%>", string.Join(",", (from i in to select i.Address).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%RecipientsDisplayName%>", string.Join(",", (from i in to select string.IsNullOrEmpty(i.DisplayName) ? i.Address : i.DisplayName).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%RecipientsFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%RecipientsFullAddress%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%To%>", string.Join(",", (from i in to select i.Address).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%ToDisplayName%>", string.Join(",", (from i in to select string.IsNullOrEmpty(i.DisplayName) ? i.Address : i.DisplayName).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%ToFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%ToFullAddress%>", addresses ?? "", RegexOptions.IgnoreCase); } break; case EmailReplacementType.CC: var cc = ParseRecipients(addresses); str = Regex.Replace(str, "<%CC%>", string.Join(",", (from i in cc select i.Address).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%CCDisplayName%>", string.Join(",", (from i in cc select string.IsNullOrEmpty(i.DisplayName) ? i.Address : i.DisplayName).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%CCFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%CCFullAddress%>", addresses ?? "", RegexOptions.IgnoreCase); if (isHtml) { str = Regex.Replace(str, "<%CC%>", string.Join(",", (from i in cc select i.Address).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%CCDisplayName%>", string.Join(",", (from i in cc select string.IsNullOrEmpty(i.DisplayName) ? i.Address : i.DisplayName).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%CCFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%CCFullAddress%>", addresses ?? "", RegexOptions.IgnoreCase); } break; case EmailReplacementType.Bcc: var bcc = ParseRecipients(addresses); str = Regex.Replace(str, "<%Bcc%>", string.Join(",", (from i in bcc select i.Address).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%BccDisplayName%>", string.Join(",", (from i in bcc select string.IsNullOrEmpty(i.DisplayName) ? i.Address : i.DisplayName).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%BccFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%BccFullAddress%>", addresses ?? "", RegexOptions.IgnoreCase); if (isHtml) { str = Regex.Replace(str, "<%Bcc%>", string.Join(",", (from i in bcc select i.Address).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%BccDisplayName%>", string.Join(",", (from i in bcc select string.IsNullOrEmpty(i.DisplayName) ? i.Address : i.DisplayName).ToArray()), RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%BccFullName%>", addresses ?? "", RegexOptions.IgnoreCase); str = Regex.Replace(str, "<%BccFullAddress%>", addresses ?? "", RegexOptions.IgnoreCase); } break; } } return str; } private static string ApplyEmailReplacement(string str, string addresses, EmailReplacementType type) { return ApplyEmailReplacement(str, addresses, type, false); } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] private AlternateView GetAlternateView(string body) { string mediaType = this.IsBodyHtml ? "text/html" : "text/plain"; AlternateView item = AlternateView.CreateAlternateViewFromString(body, null, mediaType); foreach (var obj in m_EmbeddedObjects) { string path = obj.FileName; if (string.IsNullOrEmpty(path)) { throw new InvalidOperationException("Missing FileName in EmbeddedMailObject."); } if (!Path.IsPathRooted(path) && !string.IsNullOrEmpty(this.BodyFileName)) { string bodyFileName = GetFullBodyFileName(); path = Path.Combine(Path.GetDirectoryName(bodyFileName), path); } LinkedResource resource = new LinkedResource(path) { ContentId = obj.Name }; try { resource.ContentType.Name = Path.GetFileName(path); item.LinkedResources.Add(resource); } catch { resource.Dispose(); throw; } } return item; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] private static string ExtractSubjectFromHtmlBody(string body) { if (body == null) { return null; } int index = -1; int index2 = -1; int index3 = -1; var sb = new System.Text.StringBuilder(); foreach (string line in ReadBodyLines(body)) { if (index == -1) { index = line.IndexOf("<head>", StringComparison.OrdinalIgnoreCase); if (index == -1) { continue; } } if (index2 == -1) { index2 = line.IndexOf("<title>", index, StringComparison.OrdinalIgnoreCase); if (index2 == -1) { index2 = line.IndexOf("</head>", index, StringComparison.OrdinalIgnoreCase); if (index2 != -1) { break; } continue; } } index3 = line.IndexOf("</title>", index2, StringComparison.OrdinalIgnoreCase); if (index3 != -1) { if (index2 != 0) //line with "<title>" { sb.Append(line.Substring(index2 + "<title>".Length, index3 - index2 - "<title>".Length)); break; } sb.Append(line.Substring(0, index3)); break; } if (index2 != 0) //line with "<title>" { sb.Append(line.Substring(index2 + "<title>".Length)); index2 = 0; continue; } sb.Append(line); } string subject = System.Web.HttpUtility.HtmlDecode(sb.ToString().Trim()); return subject.Length == 0 ? null : subject; } private string GetBodyFileNameForCulture() { string bodyFileName = GetFullBodyFileName(); string fileName; if (this.Culture != null) { //Jméno souboru dle kultury string extension = Path.GetExtension(bodyFileName); fileName = Path.ChangeExtension(bodyFileName, this.Culture.Name + (string.IsNullOrEmpty(extension) ? "" : extension)); if (File.Exists(fileName)) { return fileName; } fileName = Path.ChangeExtension(bodyFileName, this.Culture.TwoLetterISOLanguageName + (string.IsNullOrEmpty(extension) ? "" : extension)); if (File.Exists(fileName)) { return fileName; } } //Jméno souboru pro výchozí kulturu return bodyFileName; } private string GetFullBodyFileName() { string path = this.BodyFileName; if (!Path.IsPathRooted(path)) { string mailTemplateRoot = System.IO.Path.GetDirectoryName((System.Reflection.Assembly.GetEntryAssembly() ?? System.Reflection.Assembly.GetExecutingAssembly()).Location); path = Path.Combine(mailTemplateRoot, path); } return path; } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] private static IEnumerable<string> ReadBodyLines(string body) { using (var reader = new StringReader(body)) { while (true) { string line = reader.ReadLine(); if (line == null) { yield break; } yield return line; } } } [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] private static string GetDefaultFrom() { var smtpCfg = (SmtpSection)System.Configuration.ConfigurationManager.GetSection("system.net/mailSettings/smtp"); if (smtpCfg == null || smtpCfg.Network == null || string.IsNullOrEmpty(smtpCfg.From)) { throw new InvalidOperationException("From address is not specified."); } return smtpCfg.From; } private static IEnumerable<MailAddress> ParseRecipients(string addresses) { if (string.IsNullOrEmpty(addresses)) { yield break; } for (int i = 0; i < addresses.Length; i++) { yield return ParseMailAddress(addresses, ref i); } } private static MailAddress ParseMailAddress(string addresses, ref int i) { int index = addresses.IndexOfAny(new[] { '"', ',' }, i); if (index != -1 && addresses[index] == '"') { index = addresses.IndexOf('"', index + 1); if (index == -1) { throw new FormatException("Invalid mail address format"); } index = addresses.IndexOf(',', index + 1); } if (index == -1) { index = addresses.Length; } var address = new MailAddress(addresses.Substring(i, index - i).Trim(' ', '\t')); i = index; return address; } #endregion } #region EmbeddedMailObject [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1812:AvoidUninstantiatedInternalClasses")] internal sealed class EmbeddedMailObject { #region member varible and default property initialization public string Name { get; set; } public string FileName { get; set; } #endregion #region constructors and destructors public EmbeddedMailObject(string name, string fileName) { this.Name = name; this.FileName = fileName; } #endregion } #endregion #region Replacement, ReplacementCollection /// <summary> /// Dvojice klíč, hodnota pro aplikování do šablony emailové zprávy /// </summary> internal class Replacement { #region constructors and destructors internal Replacement() { this.HtmlEncoding = true; } #endregion #region member varible and default property initialization /// <summary> /// Označení prvku /// </summary> public string Name { get; set; } /// <summary> /// Hodnota prvku /// </summary> public string Value { get; set; } /// <summary> /// Přiznak zda bude hodnota encodována do těla HTML zprávy /// </summary> public bool HtmlEncoding { get; set; } #endregion #region action methods /// <summary> /// Vrací textovou reprezentaci objektu /// </summary> /// <returns>Textová reprezentace objektu</returns> public override string ToString() { return string.Format(System.Globalization.CultureInfo.CurrentCulture, "{0}: {1})", this.Name, this.Value); } #endregion } /// <summary> /// Kolekce dvojic klíč, hodnota pro aplikování do šablony emailové zprávy /// </summary> internal class ReplacementCollection : IEnumerable<Replacement>, System.Collections.IEnumerable { #region member varible and default property initialization private Dictionary<string, Replacement> ReplacementsDictionary; #endregion #region constructors and destructors /// <summary> /// Výchozí konstruktor třídy <see cref="ReplacementCollection"/> /// </summary> public ReplacementCollection() { this.ReplacementsDictionary = new Dictionary<string, Replacement>(); } #endregion #region action methods /// <summary> /// Přidání prvku s klíčem <paramref name="name"/> a hodnotou <paramref name="value"/> do kolekce /// </summary> /// <param name="name">Označení prvku</param> /// <param name="value">Hodnota prvku</param> [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void Add(string name, string value) { if (name == null) { throw new ArgumentNullException("name"); } if (name.Length == 0) { throw new ArgumentException("name is empty string.", "name"); } this.ReplacementsDictionary.Add(name, new Replacement() { Name = name, Value = value }); } /// <summary> /// Přidání prvku s klíčem <paramref name="name"/> a hodnotou <paramref name="value"/> do kolekce /// </summary> /// <param name="name">Označení prvku</param> /// <param name="value">Hodnota prvku</param> /// <param name="htmlEncoding">Přiznak zda bude hodnota encodována do těla HTML zprávy</param> [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public void Add(string name, string value, bool htmlEncoding) { if (name == null) { throw new ArgumentNullException("name"); } if (name.Length == 0) { throw new ArgumentException("name is empty string.", "name"); } this.ReplacementsDictionary.Add(name, new Replacement() { Name = name, Value = value, HtmlEncoding = htmlEncoding }); } /// <summary> /// Odstranění prvku s klíčem <paramref name="name"/> s kolekce /// </summary> /// <param name="name">Označení prvku</param> /// <returns><c>true</c> pokud byl prvek k odstranění v kolekci nalezen</returns> [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public bool Remove(string name) { return this.ReplacementsDictionary.Remove(name); } /// <summary> /// Vrací emunerátor kolekce /// </summary> /// <returns><see cref="IEnumerator<Replacement>"/> kolekce</returns> public IEnumerator<Replacement> GetEnumerator() { return this.ReplacementsDictionary.Values.GetEnumerator(); } #endregion #region property getters/setters /// <summary> /// Počet prvků kolekce /// </summary> [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] public int Count { get { return this.ReplacementsDictionary.Count; } } #endregion #region IEnumerable Members System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() { return GetEnumerator(); } #endregion } #endregion }