2017-05-30 17:19:46 -04:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using SendGrid;
|
|
|
|
|
|
using SendGrid.Helpers.Mail;
|
|
|
|
|
|
using Bit.Core.Models.Mail;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Bit.Core.Services
|
|
|
|
|
|
{
|
|
|
|
|
|
public class SendGridMailDeliveryService : IMailDeliveryService
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly GlobalSettings _globalSettings;
|
|
|
|
|
|
private readonly SendGridClient _client;
|
|
|
|
|
|
|
|
|
|
|
|
public SendGridMailDeliveryService(GlobalSettings globalSettings)
|
|
|
|
|
|
{
|
2017-05-30 22:40:02 -04:00
|
|
|
|
if(globalSettings.Mail?.SendGridApiKey == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
throw new ArgumentNullException(nameof(globalSettings.Mail.SendGridApiKey));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-05-30 17:19:46 -04:00
|
|
|
|
_globalSettings = globalSettings;
|
2017-05-30 22:40:02 -04:00
|
|
|
|
_client = new SendGridClient(_globalSettings.Mail.SendGridApiKey);
|
2017-05-30 17:19:46 -04:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async Task SendEmailAsync(MailMessage message)
|
|
|
|
|
|
{
|
|
|
|
|
|
var sendGridMessage = new SendGridMessage
|
|
|
|
|
|
{
|
|
|
|
|
|
Subject = message.Subject,
|
|
|
|
|
|
From = new EmailAddress(_globalSettings.Mail.ReplyToEmail, _globalSettings.SiteName),
|
|
|
|
|
|
HtmlContent = message.HtmlContent,
|
|
|
|
|
|
PlainTextContent = message.TextContent,
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
sendGridMessage.AddTos(message.ToEmails.Select(e => new EmailAddress(e)).ToList());
|
|
|
|
|
|
|
2017-05-30 23:43:00 -04:00
|
|
|
|
if(message.MetaData?.ContainsKey("SendGridTemplateId") ?? false)
|
2017-05-30 17:19:46 -04:00
|
|
|
|
{
|
|
|
|
|
|
sendGridMessage.HtmlContent = " ";
|
|
|
|
|
|
sendGridMessage.PlainTextContent = " ";
|
|
|
|
|
|
sendGridMessage.TemplateId = message.MetaData["SendGridTemplateId"].ToString();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-05-30 23:43:00 -04:00
|
|
|
|
if(message.MetaData?.ContainsKey("SendGridSubstitutions") ?? false)
|
2017-05-30 17:19:46 -04:00
|
|
|
|
{
|
|
|
|
|
|
var subs = message.MetaData["SendGridSubstitutions"] as Dictionary<string, string>;
|
|
|
|
|
|
sendGridMessage.AddSubstitutions(subs);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-05-30 23:43:00 -04:00
|
|
|
|
if(message.MetaData?.ContainsKey("SendGridCategories") ?? false)
|
2017-05-30 17:19:46 -04:00
|
|
|
|
{
|
|
|
|
|
|
var cats = message.MetaData["SendGridCategories"] as List<string>;
|
|
|
|
|
|
sendGridMessage.AddCategories(cats);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2017-05-30 23:43:00 -04:00
|
|
|
|
if(message.MetaData?.ContainsKey("SendGridBypassListManagement") ?? false)
|
2017-05-30 17:19:46 -04:00
|
|
|
|
{
|
|
|
|
|
|
var bypass = message.MetaData["SendGridBypassListManagement"] as bool?;
|
|
|
|
|
|
sendGridMessage.SetBypassListManagement(bypass.GetValueOrDefault(false));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
await _client.SendEmailAsync(sendGridMessage);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|