Skip to content

Commit 2c3c676

Browse files
authored
Merge pull request #2103 from bcgov/bugfix/AB#31165-notifications-drop-cc-bcc
bugfix/AB#31165 - Email - Fix dropped CC and BCC contacts
2 parents 6dd9416 + 632b3b4 commit 2c3c676

1 file changed

Lines changed: 31 additions & 8 deletions

File tree

  • applications/Unity.GrantManager/modules/Unity.Notifications/src/Unity.Notifications.Application/EmailNotificaions

applications/Unity.GrantManager/modules/Unity.Notifications/src/Unity.Notifications.Application/EmailNotificaions/EmailNotificationManager.cs

Lines changed: 31 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ public async Task<HttpResponseMessage> SendEmailAsync(string emailTo, string bod
117117
}
118118

119119
// Send the email using the CHES client service
120-
var emailObject = await GetEmailObjectAsync(emailTo, body, subject, emailFrom, emailBodyType, emailTemplateName, emailCC, emailBCC);
120+
var emailObject = await GetEmailObjectAsync(
121+
emailTo, body, subject, emailFrom, emailBodyType, emailTemplateName, emailCC, emailBCC, excludeTemplate: true);
122+
121123
var response = await chesClientService.SendAsync(emailObject);
122124

123125
// Assuming SendAsync returns a HttpResponseMessage or equivalent:
@@ -222,7 +224,8 @@ public async Task<dynamic> BuildEmailObjectWithAttachmentsAsync(EmailLog emailLo
222224
emailLog.BodyType,
223225
emailLog.TemplateName,
224226
emailLog.CC,
225-
emailLog.BCC);
227+
emailLog.BCC,
228+
excludeTemplate: true);
226229

227230
// Retrieve attachments from S3
228231
var attachments = await emailAttachmentService.GetAttachmentsAsync(emailLog.Id);
@@ -261,7 +264,8 @@ protected virtual async Task<dynamic> GetEmailObjectAsync(
261264
string? emailBodyType,
262265
string? emailTemplateName,
263266
string? emailCC = null,
264-
string? emailBCC = null)
267+
string? emailBCC = null,
268+
bool excludeTemplate = false)
265269
{
266270
var toList = emailTo.ParseEmailList() ?? [];
267271
var ccList = emailCC.ParseEmailList();
@@ -274,28 +278,47 @@ protected virtual async Task<dynamic> GetEmailObjectAsync(
274278

275279
emailObjectDictionary["body"] = body;
276280
emailObjectDictionary["bodyType"] = emailBodyType ?? "text";
277-
emailObjectDictionary["cc"] = ccList;
278-
emailObjectDictionary["bcc"] = bccList;
279281
emailObjectDictionary["encoding"] = "utf-8";
280282
emailObjectDictionary["from"] = emailFrom ?? defaultFromAddress ?? "NoReply@gov.bc.ca";
281283
emailObjectDictionary["priority"] = "normal";
282284
emailObjectDictionary["subject"] = subject;
283285
emailObjectDictionary["tag"] = "tag";
284286
emailObjectDictionary["to"] = toList;
285-
emailObjectDictionary["templateName"] = emailTemplateName;
287+
288+
// Only include cc/bcc when provided CHES API expects arrays, not null.
289+
if (ccList != null)
290+
{
291+
emailObjectDictionary["cc"] = ccList;
292+
}
293+
if (bccList != null)
294+
{
295+
emailObjectDictionary["bcc"] = bccList;
296+
}
297+
298+
// templateName is not part of the CHES MessageObject schema
299+
// store it on the EmailLog but don't send it to the API.
300+
if (!excludeTemplate)
301+
{
302+
emailObjectDictionary["templateName"] = emailTemplateName;
303+
}
286304

287305
return emailObject;
288306
}
289307

290308
protected virtual EmailLog UpdateMappedEmailLog(EmailLog emailLog, dynamic emailDynamicObject)
291309
{
310+
var dict = (IDictionary<string, object?>)emailDynamicObject;
292311
emailLog.Body = emailDynamicObject.body;
293312
emailLog.Subject = emailDynamicObject.subject;
294313
emailLog.BodyType = emailDynamicObject.bodyType;
295314
emailLog.FromAddress = emailDynamicObject.from;
296315
emailLog.ToAddress = string.Join(",", emailDynamicObject.to);
297-
emailLog.CC = emailDynamicObject.cc != null ? string.Join(",", (IEnumerable<string>)emailDynamicObject.cc) : string.Empty;
298-
emailLog.BCC = emailDynamicObject.bcc != null ? string.Join(",", (IEnumerable<string>)emailDynamicObject.bcc) : string.Empty;
316+
emailLog.CC = dict.TryGetValue("cc", out var cc) && cc is IEnumerable<string> ccList
317+
? string.Join(",", ccList)
318+
: string.Empty;
319+
emailLog.BCC = dict.TryGetValue("bcc", out var bcc) && bcc is IEnumerable<string> bccList
320+
? string.Join(",", bccList)
321+
: string.Empty;
299322
emailLog.TemplateName = emailDynamicObject.templateName;
300323
return emailLog;
301324
}

0 commit comments

Comments
 (0)