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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        /// <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)
            });
        }