private void HandleEWSMessage(EWSIncomingMessage originalMessage, IWorkItemFields workItemFields) { var replyTemplate = new AckEmailTemplate(_config.EmailSettings.GetReplyTemplate()); var replyBody = replyTemplate.Apply(workItemFields, _config); originalMessage.Reply(replyBody, _config.EmailSettings.AckEmailsRecipientsAll); }
private void HandleEWSMessage(EWSIncomingMessage originalMessage, IWorkItemFields workItemFields) { var replyTemplate = new AckEmailTemplate(_config.EmailSettings.GetReplyTemplate()); var replyBody = replyTemplate.Apply(workItemFields, _config); originalMessage.BeforeMessageSend += (origmessage, message) => { // only add the work item id, if it not allready there // TODO: remove hard coded strings hier an place it in the configuration if (!origmessage.Subject.Contains("bug #")) { message.Subject = "bug #" + workItemFields.ID + " created RE: " + origmessage.Subject; } }; originalMessage.Reply(replyBody, _config.EmailSettings.AckEmailsRecipientsAll); }
/// <summary> /// Send mail announcing receipt of new ticket /// </summary> public void SendAckEmail(IIncomingEmailMessage originalMessage, IWorkItemFields workItemFields) { // Don't send ack emails if it's disabled in configuration if (!_config.EmailSettings.SendAckEmails) { Logger.DebugFormat("Ack emails disabled in configuration - skipping"); return; } var ewsMessage = originalMessage as EWSIncomingMessage; if (ewsMessage != null) { HandleEWSMessage(ewsMessage, workItemFields); } }
/// <summary> /// Produce text content by applying replacements on the template. /// </summary> /// <param name="workItemFields">work item for which the content is generated</param> /// <param name="config">the instance config</param> /// <returns>text content produced by applying replacements for placeholders</returns> public string Apply(IWorkItemFields workItemFields, Config.InstanceConfig config) { var bodyBuilder = new StringBuilder(_text); var placeholders = AckEmailPlaceholder.GetPlaceholders(_text); var specialReplacements = GetSpecialReplacements(workItemFields, config); foreach (var placeholder in placeholders) { var fieldNameUpper = placeholder.Field.ToUpper(); var fieldValue = specialReplacements.ContainsKey(fieldNameUpper) ? specialReplacements[fieldNameUpper] : workItemFields.GetFieldValue(placeholder.Field); var value = string.IsNullOrWhiteSpace(fieldValue) ? placeholder.DefaultValue : fieldValue; Logger.DebugFormat("Replacing placeholder {0} with value '{1}'", placeholder.Text, value); bodyBuilder.Replace(placeholder.Text, value); } return(bodyBuilder.ToString()); }
/// <summary> /// Get replacements to use for special placeholders. This includes provider independent placeholders for standard /// work item fields as well as global placeholders that are not work item specific. /// </summary> /// <param name="workItemFields">work item for which template is to be generated</param> /// <param name="config">the instance config</param> /// <returns></returns> private IDictionary <string, string> GetSpecialReplacements(IWorkItemFields workItemFields, Config.InstanceConfig config) { return(new Dictionary <string, string> { // Non-work item fields. ["MAIL2BUGALIAS"] = EncodeHtml(config.EmailSettings.Recipients?.Replace(';', '/')), // TFS specific fields. ["TFSWORKITEMTEMPLATE"] = EncodeHtml(config.TfsServerConfig.WorkItemTemplate), ["TFSCOLLECTIONURI"] = EncodeHtml(config.TfsServerConfig.CollectionUri), ["TFSPROJECT"] = EncodeHtml(config.TfsServerConfig.Project), // Special work item fields. ["BUGID"] = EncodeHtml(workItemFields.ID), // for backward compat [AckEmailPlaceholder.ID] = EncodeHtml(workItemFields.ID), [AckEmailPlaceholder.Title] = EncodeHtml(workItemFields.Title), [AckEmailPlaceholder.Owner] = EncodeHtml(workItemFields.Owner), [AckEmailPlaceholder.State] = EncodeHtml(workItemFields.State) }); }