private async Task <SendEmailResult> SendNotificationEmail(TenantInformation tenant, NotificationMessage message, INotificationRepository repository) { Logger.Log($"Handling started for user ID {message.UserId} with message {message.ToJSON()}", message, tenant); if (message.To == null || !message.To.Any() || message.To.All(string.IsNullOrWhiteSpace)) { Logger.Log("Failed to send email because no recipients were specified", message, tenant, LogLevel.Error); return(await Task.FromResult(SendEmailResult.Error)); } Logger.Log("Getting email settings", message, tenant); var emailSettings = await repository.GetEmailSettings(); if (emailSettings == null || string.IsNullOrWhiteSpace(emailSettings.HostName)) { Logger.Log($"Failed to send email because invalid email settings were provided for tenant {tenant.TenantId}", message, tenant, LogLevel.Error); return(await Task.FromResult(SendEmailResult.Error)); } Logger.Log($"Email settings found. Host Name: {emailSettings.HostName}. Sender Email Address: {emailSettings.SenderEmailAddress}. User Name: {emailSettings.UserName}", message, tenant); // Get the logo byte[] logoImageArray = new LogoDataProvider().GetLogo(); string logoImageSrc = null; if (logoImageArray != null) { logoImageSrc = GetImageSrc(logoImageArray, DiscussionEmail.LogoImageAttachmentContentId); } var notificationEmail = new NotificationEmail( message.ProjectId, message.ProjectName, message.ArtifactId, message.ArtifactName, message.ArtifactUrl, message.Message, message.Header, logoImageSrc, message.BlueprintUrl); var emailMessage = new Message { Subject = message.Subject, FromDisplayName = message.From, To = message.To.ToArray(), From = emailSettings.SenderEmailAddress, IsBodyHtml = true, Body = new NotificationEmailContent(notificationEmail).TransformText() }; if (logoImageArray != null) { emailMessage.DiscussionEmail = new DiscussionEmail { LogoImageSrc = logoImageSrc, LogoImageAttachmentArray = logoImageArray }; } var smtpClientConfiguration = new SMTPClientConfiguration { Authenticated = emailSettings.Authenticated, EnableSsl = emailSettings.EnableSSL, HostName = emailSettings.HostName, // Bug 61312: Password must be decrypted before saving in configuration Password = SystemEncryptions.DecryptFromSilverlight(emailSettings.Password), Port = emailSettings.Port, UserName = emailSettings.UserName }; if (string.IsNullOrWhiteSpace(smtpClientConfiguration.HostName)) { Logger.Log("Sending email failed because no host name was found. Check your email settings", message, tenant, LogLevel.Error); return(await Task.FromResult(SendEmailResult.Error)); } Logger.Log($"Sending Email to {string.Join(",", emailMessage.To)}", message, tenant); repository.SendEmail(smtpClientConfiguration, emailMessage); Logger.Log("Email Sent Successfully", message, tenant); return(await Task.FromResult(SendEmailResult.Success)); }