1313
1414namespace FluentEmail . SendGrid
1515{
16- public class SendGridSender : ISender
16+ public class SendGridSender : ISendGridSender
1717 {
1818 private readonly string _apiKey ;
1919 private readonly bool _sandBoxMode ;
@@ -30,8 +30,41 @@ public SendResponse Send(IFluentEmail email, CancellationToken? token = null)
3030
3131 public async Task < SendResponse > SendAsync ( IFluentEmail email , CancellationToken ? token = null )
3232 {
33- var sendGridClient = new SendGridClient ( _apiKey ) ;
33+ var mailMessage = await BuildSendGridMessage ( email ) ;
34+
35+ if ( email . Data . IsHtml )
36+ {
37+ mailMessage . HtmlContent = email . Data . Body ;
38+ }
39+ else
40+ {
41+ mailMessage . PlainTextContent = email . Data . Body ;
42+ }
43+
44+ if ( ! string . IsNullOrEmpty ( email . Data . PlaintextAlternativeBody ) )
45+ {
46+ mailMessage . PlainTextContent = email . Data . PlaintextAlternativeBody ;
47+ }
48+
49+ var sendResponse = await SendViaSendGrid ( mailMessage , token ) ;
50+
51+ return sendResponse ;
52+ }
3453
54+ public async Task < SendResponse > SendWithTemplateAsync ( IFluentEmail email , string templateId , object templateData , CancellationToken ? token = null )
55+ {
56+ var mailMessage = await BuildSendGridMessage ( email ) ;
57+
58+ mailMessage . SetTemplateId ( templateId ) ;
59+ mailMessage . SetTemplateData ( templateData ) ;
60+
61+ var sendResponse = await SendViaSendGrid ( mailMessage , token ) ;
62+
63+ return sendResponse ;
64+ }
65+
66+ private async Task < SendGridMessage > BuildSendGridMessage ( IFluentEmail email )
67+ {
3568 var mailMessage = new SendGridMessage ( ) ;
3669 mailMessage . SetSandBoxMode ( _sandBoxMode ) ;
3770
@@ -57,7 +90,10 @@ public async Task<SendResponse> SendAsync(IFluentEmail email, CancellationToken?
5790 mailMessage . AddHeaders ( email . Data . Headers . ToDictionary ( kvp => kvp . Key , kvp => kvp . Value ) ) ;
5891 }
5992
60- mailMessage . Categories = email . Data . Tags . ToList ( ) ;
93+ if ( email . Data . Tags != null && email . Data . Tags . Any ( ) )
94+ {
95+ mailMessage . Categories = email . Data . Tags . ToList ( ) ;
96+ }
6197
6298 if ( email . Data . IsHtml )
6399 {
@@ -94,11 +130,6 @@ public async Task<SendResponse> SendAsync(IFluentEmail email, CancellationToken?
94130 break ;
95131 }
96132
97- if ( ! string . IsNullOrEmpty ( email . Data . PlaintextAlternativeBody ) )
98- {
99- mailMessage . PlainTextContent = email . Data . PlaintextAlternativeBody ;
100- }
101-
102133 if ( email . Data . Attachments . Any ( ) )
103134 {
104135 foreach ( var attachment in email . Data . Attachments )
@@ -109,6 +140,12 @@ public async Task<SendResponse> SendAsync(IFluentEmail email, CancellationToken?
109140 }
110141 }
111142
143+ return mailMessage ;
144+ }
145+
146+ private async Task < SendResponse > SendViaSendGrid ( SendGridMessage mailMessage , CancellationToken ? token = null )
147+ {
148+ var sendGridClient = new SendGridClient ( _apiKey ) ;
112149 var sendGridResponse = await sendGridClient . SendEmailAsync ( mailMessage , token . GetValueOrDefault ( ) ) ;
113150
114151 var sendResponse = new SendResponse ( ) ;
0 commit comments