From ea6a3915aeb4dbbc986f38ff6c7ff756976692e0 Mon Sep 17 00:00:00 2001 From: Shawn Jackson Date: Tue, 21 May 2024 21:06:52 -0700 Subject: [PATCH] CU-8688j7vya del password from init dep creation email, other email fixes --- .../PostmarkTemplateProvider.cs | 462 +++++---------- .../Resgrid.Providers.Email.csproj | 8 + .../Template/Cancelled.html | 489 ++++++++++++++++ .../Template/ChargeFailed.html | 485 ++++++++++++++++ .../Template/DepartmentLinkCreated.html | 486 ++++++++++++++++ .../Template/Receipt.html | 535 ++++++++++++++++++ .../Template/Welcome.html | 3 - 7 files changed, 2154 insertions(+), 314 deletions(-) create mode 100644 Providers/Resgrid.Providers.Email/Template/Cancelled.html create mode 100644 Providers/Resgrid.Providers.Email/Template/ChargeFailed.html create mode 100644 Providers/Resgrid.Providers.Email/Template/DepartmentLinkCreated.html create mode 100644 Providers/Resgrid.Providers.Email/Template/Receipt.html diff --git a/Providers/Resgrid.Providers.Email/PostmarkTemplateProvider.cs b/Providers/Resgrid.Providers.Email/PostmarkTemplateProvider.cs index 18ad6a0c..5d940d5a 100644 --- a/Providers/Resgrid.Providers.Email/PostmarkTemplateProvider.cs +++ b/Providers/Resgrid.Providers.Email/PostmarkTemplateProvider.cs @@ -1,5 +1,4 @@ -using PostmarkDotNet; -using Resgrid.Config; +using Resgrid.Config; using Resgrid.Framework; using Resgrid.Model; using Resgrid.Model.Providers; @@ -8,7 +7,6 @@ using System.IO; using System.Text; using System.Threading.Tasks; -using System.Web; namespace Resgrid.Providers.EmailProvider { @@ -19,8 +17,8 @@ public class PostmarkTemplateProvider : IEmailProvider private static string FROM_EMAIL = OutboundEmailServerConfig.ToMail; private static string DONOTREPLY_EMAIL = OutboundEmailServerConfig.FromMail; private static string LOGIN_URL = $"{SystemBehaviorConfig.ResgridBaseUrl}/Account/LogOn"; - private static string LIVECHAT_URL = $"{SystemBehaviorConfig.ResgridBaseUrl}/Home/Contact"; - private static string HELP_URL = "https://resgrid.uservoice.com"; + private static string LIVECHAT_URL = $"https://resgrid.com/contact"; + private static string HELP_URL = "https://resgrid.zohodesk.com/portal/en/homem"; private static string UPDATEBILLINGINFO_URL = $"{SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription/UpdateBillingInfo"; public PostmarkTemplateProvider(IEmailSender emailSender) @@ -50,7 +48,6 @@ public void SendAffiliateWelcomeMail(string name, string email) public async Task SendDeleteDepartmentEmail(string requesterName, string departmentName, DateTime localCompletedOn, string sendingToPersonName, string email) { - var templateModel = new Dictionary { { "requester_name", requesterName }, @@ -79,7 +76,6 @@ public async Task SendDeleteDepartmentEmail(string requesterName, string d { } - return false; } @@ -117,50 +113,23 @@ public async Task SendCallMail(string email, string subject, string title, templateModel.Add("callAudio_url", shortenedAudioUrl); } - if (SystemBehaviorConfig.OutboundEmailType == OutboundEmailTypes.Postmark) - { - var message = new TemplatedPostmarkMessage - { - From = DONOTREPLY_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkCallEmailTemplateId, - TemplateModel = templateModel - }; - - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); - try - { - PostmarkResponse response = await client.SendMessageAsync(message); + try + { + var template = Mustachio.Parser.Parse(GetTempate("Call.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = FROM_EMAIL; + newEmail.From = FROM_EMAIL; + newEmail.Subject = "New Call: " + subject; + newEmail.To.Add(email); - return true; - } - catch (Exception) - { - } + return await _emailSender.Send(newEmail); } - else + catch (Exception) { - try - { - var template = Mustachio.Parser.Parse(GetTempate("Call.html")); - var content = template(templateModel); - - Email newEmail = new Email(); - newEmail.HtmlBody = content; - newEmail.Sender = FROM_EMAIL; - newEmail.To.Add(email); - - return await _emailSender.Send(newEmail); - } - catch (Exception) - { - } } return false; @@ -169,44 +138,32 @@ public async Task SendCallMail(string email, string subject, string title, public async Task SendTroubleAlertMail(string email, string unitName, string gpsLocation, string personnel, string callAddress, string unitAddress, string dispatchedOn, string callName) { - // Example request - var message = new TemplatedPostmarkMessage + var templateModel = new Dictionary { - From = DONOTREPLY_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkTroubleAlertTemplateId, - TemplateModel = new Dictionary - { - { "unit_name", unitName }, + { "unit_name", unitName }, { "date", dispatchedOn }, { "active_call", callName }, { "call_address", callAddress }, { "address", unitAddress }, { "gps_location", gpsLocation }, { "personnel_names", personnel } - }, }; - if (SystemBehaviorConfig.OutboundEmailType == OutboundEmailTypes.Postmark) + try { - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); - - try - { - PostmarkResponse response = await client.SendMessageAsync(message); + var template = Mustachio.Parser.Parse(GetTempate("TroubleAlert.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = FROM_EMAIL; + newEmail.From = FROM_EMAIL; + newEmail.Subject = "Resgrid Trouble Alert"; + newEmail.To.Add(email); - return true; - } - catch (Exception) - { - } + return await _emailSender.Send(newEmail); } - else + catch (Exception) { } @@ -215,35 +172,30 @@ public async Task SendTroubleAlertMail(string email, string unitName, stri public async Task SendCancellationReciept(string name, string email, string endDate, string departmentName) { - var message = new TemplatedPostmarkMessage + var templateModel = new Dictionary { - From = FROM_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkCancelRecieptTemplateId, - TemplateModel = new Dictionary - { - { "action_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, - { "subscriptions_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, - { "feedback_url", LIVECHAT_URL }, - { "help_url", HELP_URL }, - { "trial_extension_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, - { "export_url", "" }, - { "plans_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/Home/Pricing" }, - { "close_account_url", HELP_URL }, - }, + { "action_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, + { "subscriptions_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, + { "help_url", HELP_URL }, + { "trial_extension_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, + { "export_url", "" }, + { "plans_url", $"https://resgrid.com/pricing" }, + { "close_account_url", HELP_URL }, }; - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); try { - PostmarkResponse response = await client.SendMessageAsync(message); + var template = Mustachio.Parser.Parse(GetTempate("Cancelled.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = FROM_EMAIL; + newEmail.From = FROM_EMAIL; + newEmail.Subject = "Resgrid Subscription Canceled"; + newEmail.To.Add(email); - return true; + return await _emailSender.Send(newEmail); } catch (Exception) { @@ -254,36 +206,30 @@ public async Task SendCancellationReciept(string name, string email, strin public async Task SendChargeFailed(string name, string email, string endDate, string departmentName, string planName) { - // Example request - var message = new TemplatedPostmarkMessage + var templateModel = new Dictionary { - From = FROM_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkChargeFailedTemplateId, - TemplateModel = new Dictionary - { - { "plan_name", planName }, - { "action_url", UPDATEBILLINGINFO_URL }, - { "subscriptions_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, - { "feedback_url", LIVECHAT_URL }, - { "help_url", HELP_URL }, - { "trial_extension_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, - { "export_url", "" }, - { "close_account_url", HELP_URL }, - }, + { "plan_name", planName }, + { "action_url", UPDATEBILLINGINFO_URL }, + { "subscriptions_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, + { "help_url", HELP_URL }, + { "trial_extension_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/User/Subscription" }, + { "export_url", "" }, + { "close_account_url", HELP_URL }, }; - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); try { - PostmarkResponse response = await client.SendMessageAsync(message); + var template = Mustachio.Parser.Parse(GetTempate("ChargeFailed.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = FROM_EMAIL; + newEmail.From = FROM_EMAIL; + newEmail.Subject = "Resgrid Subscription Payment Failed"; + newEmail.To.Add(email); - return true; + return await _emailSender.Send(newEmail); } catch (Exception) { @@ -294,36 +240,31 @@ public async Task SendChargeFailed(string name, string email, string endDa public async Task SendInviteMail(string code, string departmentName, string email, string senderName, string senderEmail) { - // Example request - var message = new TemplatedPostmarkMessage + var templateModel = new Dictionary { - From = FROM_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkInviteTemplateId, - TemplateModel = new Dictionary - { - { "invite_sender_name", senderName }, - { "department_name", departmentName }, - { "action_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/Account/CompleteInvite?inviteCode={code}" }, - { "support_email", FROM_EMAIL }, - { "live_chat_url", LIVECHAT_URL }, - { "help_url", HELP_URL }, - { "sender_email", senderEmail }, - { "invite_sender_organization_name", departmentName }, - }, + { "invite_sender_name", senderName }, + { "department_name", departmentName }, + { "action_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/Account/CompleteInvite?inviteCode={code}" }, + { "support_email", FROM_EMAIL }, + { "live_chat_url", LIVECHAT_URL }, + { "help_url", HELP_URL }, + { "sender_email", senderEmail }, + { "invite_sender_organization_name", departmentName }, }; - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); try { - PostmarkResponse response = await client.SendMessageAsync(message); + var template = Mustachio.Parser.Parse(GetTempate("Invitation.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = FROM_EMAIL; + newEmail.From = FROM_EMAIL; + newEmail.Subject = $"You're invited to Join {departmentName} in Resgrid"; + newEmail.To.Add(email); - return true; + return await _emailSender.Send(newEmail); } catch (Exception) { @@ -340,64 +281,27 @@ public async Task SendMessageMail(string email, string subject, string mes { "sender_name", senderName }, { "title", subject }, { "body", HtmlToTextHelper.ConvertHtml(messageBody) }, - //{ "attachment_details", new []{ - //new Dictionary { - // { "attachmnet_url", "attachmnet_url_Value" }, - // { "attachment_name", "attachment_name_Value" }, - // { "attachment_size", "attachment_size_Value" }, - // { "attachment_type", "attachment_type_Value" }, - //} - //} - //}, - { "action_url", $"https://resgrid.com/User/Messages/ViewMessage?messageId={messageId}" }, { "timestamp", sentOn }, { "commenter_name", senderName } }; - if (SystemBehaviorConfig.OutboundEmailType == OutboundEmailTypes.Postmark) + try { - var message = new TemplatedPostmarkMessage - { - From = DONOTREPLY_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkMessageTemplateId, - TemplateModel = templateModel, - }; - - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); - try - { - PostmarkResponse response = await client.SendMessageAsync(message); + var template = Mustachio.Parser.Parse(GetTempate("Message.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = FROM_EMAIL; + newEmail.From = FROM_EMAIL; + newEmail.Subject = $"Resgrid New Message: {subject}"; + newEmail.To.Add(email); - return true; - } - catch (Exception) - { - } + return await _emailSender.Send(newEmail); } - else + catch (Exception) { - try - { - var template = Mustachio.Parser.Parse(GetTempate("Message.html")); - var content = template(templateModel); - - Email newEmail = new Email(); - newEmail.HtmlBody = content; - newEmail.Sender = FROM_EMAIL; - newEmail.To.Add(email); - - return await _emailSender.Send(newEmail); - } - catch (Exception) - { - } } return false; @@ -418,49 +322,22 @@ public async Task SendPasswordResetMail(string name, string password, stri { "browser_name", "" }, }; - if (SystemBehaviorConfig.OutboundEmailType == OutboundEmailTypes.Postmark) + try { - var message = new TemplatedPostmarkMessage - { - From = FROM_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkResetPasswordTemplateId, - TemplateModel = templateModel, - }; - - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); - try - { - PostmarkResponse response = await client.SendMessageAsync(message); + var template = Mustachio.Parser.Parse(GetTempate("PasswordReset.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = FROM_EMAIL; + newEmail.From = FROM_EMAIL; + newEmail.Subject = $"Resgrid Password Reset"; + newEmail.To.Add(email); - return true; - } - catch (Exception) - { - } + return await _emailSender.Send(newEmail); } - else + catch (Exception) { - try - { - var template = Mustachio.Parser.Parse(GetTempate("PasswordReset.html")); - var content = template(templateModel); - - Email newEmail = new Email(); - newEmail.HtmlBody = content; - newEmail.Sender = FROM_EMAIL; - newEmail.To.Add(email); - - return await _emailSender.Send(newEmail); - } - catch (Exception) - { - } } return false; @@ -469,49 +346,45 @@ public async Task SendPasswordResetMail(string name, string password, stri public async Task SendPaymentReciept(string departmentName, string name, string processDate, string amount, string email, string processor, string transactionId, string planName, string effectiveDates, string nextBillingDate, int paymentId) { - var message = new TemplatedPostmarkMessage + var templateModel = new Dictionary { - From = FROM_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkRecieptTemplateId, - TemplateModel = new Dictionary + { "purchase_date", processDate }, + { "name", name }, + { "billing_url", UPDATEBILLINGINFO_URL }, + { "uservoice_url", LIVECHAT_URL }, + { "receipt_id", transactionId }, + { "date", effectiveDates }, { - { "purchase_date", processDate }, - { "name", name }, - { "billing_url", UPDATEBILLINGINFO_URL }, - { "uservoice_url", LIVECHAT_URL }, - { "receipt_id", transactionId }, - { "date", effectiveDates }, + "receipt_details", new[] { - "receipt_details", new[] + new Dictionary { - new Dictionary - { - { "description", planName }, - { "amount", amount } - } + { "description", planName }, + { "amount", amount } } - }, - { "total", amount }, - { "support_url", HELP_URL }, - { "action_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}User/Subscription/ViewInvoice?paymentId={paymentId}" }, - { "credit_card_brand", "" }, - { "credit_card_last_four", "" }, - { "expiration_date", "" }, + } }, + { "total", amount }, + { "support_url", HELP_URL }, + { "action_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}User/Subscription/ViewInvoice?paymentId={paymentId}" }, + { "credit_card_brand", "" }, + { "credit_card_last_four", "" }, + { "expiration_date", "" }, }; - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); try { - PostmarkResponse response = await client.SendMessageAsync(message); + var template = Mustachio.Parser.Parse(GetTempate("Receipt.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = FROM_EMAIL; + newEmail.From = FROM_EMAIL; + newEmail.Subject = $"Resgrid Password Reset"; + newEmail.To.Add(email); - return true; + return await _emailSender.Send(newEmail); } catch (Exception) { @@ -547,55 +420,27 @@ public async Task SendWelcomeMail(string name, string departmentName, stri { "department_id", departmentId }, { "department_name", departmentName }, { "username", userName }, - { "password", password }, { "support_email", FROM_EMAIL }, { "live_chat_url", LIVECHAT_URL }, { "help_url", HELP_URL }, }; - if (SystemBehaviorConfig.OutboundEmailType == OutboundEmailTypes.Postmark) + try { - var message = new TemplatedPostmarkMessage - { - From = FROM_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkWelcomeTemplateId, - TemplateModel = templateModel, - }; - - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); - try - { - PostmarkResponse response = await client.SendMessageAsync(message); + var template = Mustachio.Parser.Parse(GetTempate("Welcome.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = DONOTREPLY_EMAIL; + newEmail.To.Add(email); + newEmail.From = DONOTREPLY_EMAIL; + newEmail.Subject = $"Welcome, {name} to Resgrid!"; - return true; - } - catch (Exception) - { - } + return await _emailSender.Send(newEmail); } - else + catch (Exception) { - try - { - var template = Mustachio.Parser.Parse(GetTempate("Welcome.html")); - var content = template(templateModel); - - Email newEmail = new Email(); - newEmail.HtmlBody = content; - newEmail.Sender = FROM_EMAIL; - newEmail.To.Add(email); - - return await _emailSender.Send(newEmail); - } - catch (Exception) - { - } } return false; @@ -615,15 +460,9 @@ public async Task TEAM_SendNotifyRefundIssued(string departmentId, string public async Task SendNewDepartmentLinkMail(string name, string departmentName, string data, string email, int departmentId) { - // Example request - var message = new TemplatedPostmarkMessage + var templateModel = new Dictionary { - From = FROM_EMAIL, - To = email, - TemplateId = Config.OutboundEmailServerConfig.PostmarkNewDepLinkTemplateId, - TemplateModel = new Dictionary - { - { "name", name }, + { "name", name }, { "action_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}" }, { "login_url", $"{Config.SystemBehaviorConfig.ResgridBaseUrl}/Account/LogOn" }, { "department_name", departmentName }, @@ -631,20 +470,21 @@ public async Task SendNewDepartmentLinkMail(string name, string department { "support_email", FROM_EMAIL }, { "live_chat_url", LIVECHAT_URL }, { "help_url", HELP_URL }, - }, }; - var client = new PostmarkClient(Config.OutboundEmailServerConfig.PostmarkApiKey); try { - PostmarkResponse response = await client.SendMessageAsync(message); + var template = Mustachio.Parser.Parse(GetTempate("DepartmentLinkCreated.html")); + var content = template(templateModel); - if (response.Status != PostmarkStatus.Success) - { - return false; - } + Email newEmail = new Email(); + newEmail.HtmlBody = content; + newEmail.Sender = DONOTREPLY_EMAIL; + newEmail.To.Add(email); + newEmail.From = DONOTREPLY_EMAIL; + newEmail.Subject = $"Resgrid Department Link Created"; - return true; + return await _emailSender.Send(newEmail); } catch (Exception) { diff --git a/Providers/Resgrid.Providers.Email/Resgrid.Providers.Email.csproj b/Providers/Resgrid.Providers.Email/Resgrid.Providers.Email.csproj index ca886222..dba63b44 100644 --- a/Providers/Resgrid.Providers.Email/Resgrid.Providers.Email.csproj +++ b/Providers/Resgrid.Providers.Email/Resgrid.Providers.Email.csproj @@ -5,17 +5,25 @@ + + + + + + + + diff --git a/Providers/Resgrid.Providers.Email/Template/Cancelled.html b/Providers/Resgrid.Providers.Email/Template/Cancelled.html new file mode 100644 index 00000000..ff7b8b9c --- /dev/null +++ b/Providers/Resgrid.Providers.Email/Template/Cancelled.html @@ -0,0 +1,489 @@ + + + + + + Your Resgrid subscription has been canceled + + + + + Your subscription for Resgrid has recently been canceled. What would you like us to do? + + + + + + + diff --git a/Providers/Resgrid.Providers.Email/Template/ChargeFailed.html b/Providers/Resgrid.Providers.Email/Template/ChargeFailed.html new file mode 100644 index 00000000..4d896a34 --- /dev/null +++ b/Providers/Resgrid.Providers.Email/Template/ChargeFailed.html @@ -0,0 +1,485 @@ + + + + + + Your Resgrid payment failed + + + + + Your Resgrid payment failed to process. Is there anything we can do to help? + + + + + + + diff --git a/Providers/Resgrid.Providers.Email/Template/DepartmentLinkCreated.html b/Providers/Resgrid.Providers.Email/Template/DepartmentLinkCreated.html new file mode 100644 index 00000000..e7a4c76b --- /dev/null +++ b/Providers/Resgrid.Providers.Email/Template/DepartmentLinkCreated.html @@ -0,0 +1,486 @@ + + + + + + A new link has been added to your Resgrid department + + + + + New Department Link + + + + + + + diff --git a/Providers/Resgrid.Providers.Email/Template/Receipt.html b/Providers/Resgrid.Providers.Email/Template/Receipt.html new file mode 100644 index 00000000..775e3b8d --- /dev/null +++ b/Providers/Resgrid.Providers.Email/Template/Receipt.html @@ -0,0 +1,535 @@ + + + + + + Receipt for Resgrid + + + + + This is a receipt for your recent purchase on {{ purchase_date }}. No payment is due with this receipt. + + + + + + + diff --git a/Providers/Resgrid.Providers.Email/Template/Welcome.html b/Providers/Resgrid.Providers.Email/Template/Welcome.html index 0d5f5723..284ae6ba 100644 --- a/Providers/Resgrid.Providers.Email/Template/Welcome.html +++ b/Providers/Resgrid.Providers.Email/Template/Welcome.html @@ -418,9 +418,6 @@

Welcome, {{name}}!

Username: {{username}} - - Password: {{password}} -