Exemple #1
0
        /// <summary>
        /// Expands the fields in the template using the lookup provider
        /// </summary>
        /// <param name="fieldsLookup">A TFS lookup provider</param>
        /// <param name="template">The HTML like template</param>
        /// <returns>An expanded message</returns>
        internal static string ExpandTemplateFields(IFieldLookupProvider fieldsLookup, string template)
        {
            // process the work item fields
            string returnValue = template;

            // Process work item fields
            int endIndex   = -1;
            int startIndex = template.IndexOf(EmailTemplate.FieldTag, endIndex + 1);

            while (startIndex > -1)
            {
                endIndex = template.IndexOf(EmailTemplate.FieldTag, startIndex + 1);
                var fieldName = template.Substring(startIndex + 2, endIndex - startIndex - 2);
                returnValue = returnValue.Replace(string.Format("{1}{0}{1}", fieldName, EmailTemplate.FieldTag), fieldsLookup.LookupWorkItemFieldValue(fieldName));
                startIndex  = template.IndexOf(EmailTemplate.FieldTag, endIndex + 1);
            }

            // Process alert fields
            endIndex   = -1;
            startIndex = template.IndexOf(EmailTemplate.AlertTag, endIndex + 1);
            while (startIndex > -1)
            {
                endIndex = template.IndexOf(EmailTemplate.AlertTag, startIndex + 1);
                var fieldName = template.Substring(startIndex + 2, endIndex - startIndex - 2);
                returnValue = returnValue.Replace(string.Format("{1}{0}{1}", fieldName, EmailTemplate.AlertTag), fieldsLookup.LookupAlertFieldValue(fieldName));
                startIndex  = template.IndexOf(EmailTemplate.AlertTag, endIndex + 1);
            }

            return(returnValue);
        }
Exemple #2
0
        /// <summary>
        /// Sends the email build from a work item
        /// </summary>
        /// <param name="fieldsLookupProvider">The provider that extracts the data from Azure DevOps</param>
        /// <param name="templatePath">The path to the HTML (like) template file</param>
        /// <param name="includeAllWorkItemFields">If true all available work item fields are appended to the email body</param>
        /// <param name="includeAllAlertFields">If true all available alert fields are appended to the email body</param>
        public void SendEmailAlert(
            IFieldLookupProvider fieldsLookupProvider,
            string templatePath,
            bool includeAllWorkItemFields,
            bool includeAllAlertFields)
        {
            if (fieldsLookupProvider == null)
            {
                throw new ArgumentNullException("fieldsLookupProvider", "The fieldsLookupProvider cannot be null");
            }

            var template = EmailTemplate.LoadTemplate(templatePath, fieldsLookupProvider.GetWorkItemType);

            if (template != null)
            {
                using (var msg = new MailMessage())
                {
                    var addresses = fieldsLookupProvider.GetInterestedEmailAddresses(this.domain);
                    if (string.IsNullOrEmpty(addresses) == false)
                    {
                        msg.To.Add(addresses);
                        msg.From       = new MailAddress(this.fromAddress);
                        msg.Subject    = EmailHelper.ExpandTemplateFields(fieldsLookupProvider, template.Title);
                        msg.IsBodyHtml = true;
                        msg.Body       = EmailHelper.ExpandTemplateFields(fieldsLookupProvider, template.Body);

                        if (includeAllWorkItemFields == true)
                        {
                            msg.Body += fieldsLookupProvider.GetAllWorkItemFields(template.WiFieldHeader);
                        }

                        if (includeAllAlertFields == true)
                        {
                            msg.Body += fieldsLookupProvider.GetAllAlertFields(template.AlertFieldHeader);
                        }

                        using (var client = new SmtpClient(this.smptServer, this.port))
                        {
                            if (string.IsNullOrEmpty(this.username))
                            {
                                client.Credentials = CredentialCache.DefaultNetworkCredentials;
                            }
                            else
                            {
                                client.Credentials = new System.Net.NetworkCredential(this.username, this.password);
                            }
                            client.Send(msg);
                        }

                        logger.Info(string.Format("AzureDevOpsEventsProcessor: '{0}' email sent to {1}", msg.Subject, msg.To[0].Address));
                    }
                    else
                    {
                        logger.Info(string.Format("AzureDevOpsEventsProcessor: '{0}' No email sent as no interested parties", msg.Subject));
                    }
                }
            }
        }