From d1f040051daeefd71d940566d51241c38c24a4cd Mon Sep 17 00:00:00 2001 From: andrewwallacespeckle <139135120+andrewwallacespeckle@users.noreply.github.com> Date: Fri, 7 Mar 2025 15:30:03 +0000 Subject: [PATCH] refactor(server): Update system emails (#4074) * Update email verification. And workspace invite emails. * Footer logos * Workspace requests * Trial * Misc emails * New logo * Updates to font, spacing and footer * Remove space * Update invite emails * Correct classes --- .../assets/emails/templates/basic/basic.html | 5 +- .../templates/components/ctaButton.mjml | 7 +- .../emails/templates/components/footer.mjml | 79 ++++++++++++++---- .../emails/templates/components/head.mjml | 3 +- .../templates/components/headerLogo.mjml | 4 +- .../speckleBasicEmailTemplate.mjml.ejs | 22 +++-- .../server/assets/public/social/facebook.svg | 1 + .../server/assets/public/social/instagram.svg | 1 + .../server/assets/public/social/linkedin.svg | 1 + packages/server/assets/public/social/x.svg | 1 + .../server/assets/public/social/youtube.svg | 1 + .../assets/public/speckle-email-logo.png | Bin 4771 -> 2501 bytes .../emails/services/verification/request.ts | 12 +-- .../emails/tests/verifications.spec.ts | 4 +- .../gatekeeper/services/trialEmails.ts | 10 +-- .../services/handlers/mentionedInComment.ts | 4 +- .../handlers/newStreamAccessRequest.ts | 4 +- .../handlers/streamAccessRequestApproved.ts | 4 +- .../modules/pwdreset/services/request.ts | 4 +- .../services/coreEmailContents.ts | 8 +- .../modules/workspaces/services/invites.ts | 4 +- .../workspaceJoinRequestEmails/approved.ts | 9 +- .../workspaceJoinRequestEmails/denied.ts | 9 +- .../workspaceJoinRequestEmails/received.ts | 10 +-- 24 files changed, 123 insertions(+), 84 deletions(-) create mode 100644 packages/server/assets/public/social/facebook.svg create mode 100644 packages/server/assets/public/social/instagram.svg create mode 100644 packages/server/assets/public/social/linkedin.svg create mode 100644 packages/server/assets/public/social/x.svg create mode 100644 packages/server/assets/public/social/youtube.svg diff --git a/packages/server/assets/emails/templates/basic/basic.html b/packages/server/assets/emails/templates/basic/basic.html index 90e7585d5..00e57361d 100644 --- a/packages/server/assets/emails/templates/basic/basic.html +++ b/packages/server/assets/emails/templates/basic/basic.html @@ -518,7 +518,7 @@ font-size: 14px; line-height: 1; text-align: center; - color: #999999; + color: #626263; " > Sent from <%= params.server.name || 'Speckle Server' %> at @@ -528,7 +528,8 @@ > <%= params.server.url %> - , deployed and managed by <%= params.server.company %>. Your + , + deployed and managed by <%= params.server.company %>. Your admin contact is <%= params.server.contact %>. diff --git a/packages/server/assets/emails/templates/components/ctaButton.mjml b/packages/server/assets/emails/templates/components/ctaButton.mjml index bbbd4fbab..d72b7e89e 100644 --- a/packages/server/assets/emails/templates/components/ctaButton.mjml +++ b/packages/server/assets/emails/templates/components/ctaButton.mjml @@ -1,15 +1,14 @@ - + <%- params.cta.title -%> diff --git a/packages/server/assets/emails/templates/components/footer.mjml b/packages/server/assets/emails/templates/components/footer.mjml index efb333941..96430dba5 100644 --- a/packages/server/assets/emails/templates/components/footer.mjml +++ b/packages/server/assets/emails/templates/components/footer.mjml @@ -1,6 +1,6 @@ - + - + Sent from <%- params.serverInfo.name -%> at <%- params.serverInfo.canonicalUrl -%> - , deployed and managed by <%- params.serverInfo.company -%>. Your admin contact is + , deployed and managed by <%- params.serverInfo.company -%>. +
+ Your admin contact is - <%- params.serverInfo.adminContact -%> + <%- params.serverInfo.adminContact -%>. - .
- + - + Brought to you by Speckle - , the Open Source Data Platform for 3D Data. Follow Us + , the Open Source Data Platform for 3D Data.
- - LinkedIn + Join our + Community forum +
+
+ Follow us + + LinkedIn + +     + + X + +     + + Instagram + +     + + YouTube - Twitter - Instagram - Facebook - YouTube - Community
diff --git a/packages/server/assets/emails/templates/components/head.mjml b/packages/server/assets/emails/templates/components/head.mjml index 83878e56d..e5529ffd6 100644 --- a/packages/server/assets/emails/templates/components/head.mjml +++ b/packages/server/assets/emails/templates/components/head.mjml @@ -1,6 +1,7 @@ - + + h1 { font-size: 2em } h2 { font-size: 1.5em } h3 { font-size: 1.17em } h4 { diff --git a/packages/server/assets/emails/templates/components/headerLogo.mjml b/packages/server/assets/emails/templates/components/headerLogo.mjml index 383d1750f..c9e0ae10d 100644 --- a/packages/server/assets/emails/templates/components/headerLogo.mjml +++ b/packages/server/assets/emails/templates/components/headerLogo.mjml @@ -1,7 +1,7 @@ - + diff --git a/packages/server/assets/emails/templates/speckleBasicEmailTemplate.mjml.ejs b/packages/server/assets/emails/templates/speckleBasicEmailTemplate.mjml.ejs index 40b3bc310..321772dba 100644 --- a/packages/server/assets/emails/templates/speckleBasicEmailTemplate.mjml.ejs +++ b/packages/server/assets/emails/templates/speckleBasicEmailTemplate.mjml.ejs @@ -6,9 +6,7 @@ - - <%- params.body.mjml -%> - + <%- params.body.mjml -%> <% if (params.cta) { %> @@ -18,19 +16,19 @@ <% if (params.bodyEnd?.mjml?.length) { %> - - <%- params.bodyEnd?.mjml -%> - + <%- params.bodyEnd?.mjml -%> - <% } %> - - <% if (params.user?.email) { %> - + <% } %> <% if (params.user?.email) { %> + - +

If you don't want to receive these emails, update your preferences - here + + here + .

diff --git a/packages/server/assets/public/social/facebook.svg b/packages/server/assets/public/social/facebook.svg new file mode 100644 index 000000000..133487659 --- /dev/null +++ b/packages/server/assets/public/social/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/server/assets/public/social/instagram.svg b/packages/server/assets/public/social/instagram.svg new file mode 100644 index 000000000..615c7d6e3 --- /dev/null +++ b/packages/server/assets/public/social/instagram.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/server/assets/public/social/linkedin.svg b/packages/server/assets/public/social/linkedin.svg new file mode 100644 index 000000000..d9d3241e7 --- /dev/null +++ b/packages/server/assets/public/social/linkedin.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/server/assets/public/social/x.svg b/packages/server/assets/public/social/x.svg new file mode 100644 index 000000000..ff082526f --- /dev/null +++ b/packages/server/assets/public/social/x.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/server/assets/public/social/youtube.svg b/packages/server/assets/public/social/youtube.svg new file mode 100644 index 000000000..bda19ab71 --- /dev/null +++ b/packages/server/assets/public/social/youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/server/assets/public/speckle-email-logo.png b/packages/server/assets/public/speckle-email-logo.png index 79aef8d1581177d9519675f3b0dd719cf661968c..bd5f850ab96f2fe5c3654722a5d26faa15e49d0d 100644 GIT binary patch literal 2501 zcmeHJ`#%#57oSCJ>Y2F|8L^hvr6{-M$=lGfQD)*Lmxq%3eIxf`F4;;hD~Ti)xs>}Y zNlPYFV#qAFr_E*L(y)+CkKRAw{rUajobx%C@A;n3`QdyH1&_n*2Ok0h0D%2gSoFnR zo3$(VrS|UXlZVAhca2#1MT~_QyZ2bat^*3gI)?)Q(sI8=43J--xEl+wLYq587cAx3 z1i3jWbg#s%&2}0z8$>RQR@>woGHmSaTPfBD4eb=lv09ZbIpD0zAZ?2UusX2H?@6M} zM4e7ieMO3lx0tM&AF>vs*s+(?lcXy{Hr%{wYOumxMH#HH`?&;8o&k3>=GWs0;>z}V z_@|Y^xT%J#Qg(lj&r7N$&nd6CKx|aA8)c!KcP(dTQ<8B%T)o!l(!K7;V<~AQ45a!%rUHG$SQEdml9cXfRglh!;JmviVh;cC zt5mU3(TRe6Sejd@lZ7>GVICI* zLsrW{kcmVk_%((rnWe^z6HTH8hru9(vsEwdeFEFX;AV_R^U6tA>Goa+`XP_I>FXs# z#8?`^;jkr;5en5aqq(4vVXAGyIbj+qYJtMf%igwWYivQBI6b!$68>u4q!NN!QL8qi zq1I!I!!8D!H(-cu@z4b(m4W6u*ZH^B&(`Wm6Y&7kZ zTHmtyy`lSC_knlMI%6z}Z#ra$gmQd1;-|n}FF@KW-7RcVXZFzCnd>x@7|%w|EX=Vm zh`5J;%bz~W3XNJdCV629$LOy&d$;_4l8!tnzu-3IB^T3_0OiYJQmP1Xa)d3_mZYbKADxNrm+_@R~7{;Esuxl&y+7 zeZ`67Ny|&C4D{9OSFp>ubv7PP49i9~PN}&kp;@OPlenS-_R?HrZXvyfsyDOR8HXb# zW+M%^9M`?E>l^E&e}kq^X%yV3eHr_sq7~{$`v~`_nmNn$9m?^u1$Ln?In)%!th(oY zvi{w%o; zU(Z5RJuKVEGH@m~Ke=Q^*fX8g0~iaGqN_eAhhCEG)eRQMMqF-xlkXFcL$Hj_a@F~% z`06I(dsknS-GOWA5IwkGePfziQ0a7Kw>}iR#q2G%3Ge#CP|hogTXEY&)6UhXWi1C~C{m~1&t z?_XAG8!Q|N)|szLKxk=phrIGYNO@;KI4SDcF-jFY7NLlONW<1Ae_vQ)x|{h!I3{Np zgjVCU?_tl$aTuc8G&Rn0sXlWa;63H@?9q$nC3dy>lHKotFJD8EJ+U1Sf_k|K!+9-J(k-=cJ!~awN>o$xf4t2d7BWFT5)$*DKjS^H<#GjP7ue`W%`Z%&HKa^@Go94&Okn91(c>%ZB227~}U zXvq7D4QV;nf^mqWBDHSO4+LfT!TQdVouFgrVlzoFDq}A#?@RTO5hzjy3H?PG`}J<= z*9BMV=TpXqhfd6&WZvCyyCD3T!xP?yJK;<0-)p zZ8+MoP4GZel(|5QzgjY5*IZ7*7|9#Qvl6WhNwaI@nj_QFkq5-7DV7z@227gxpA8JD*^jy~TT1d|ln^{!XQ`4V>Cv{#{R#^)1sR+?};N?{Ka`zF7qE1zd@gV{zDjrU5P7N^S6$6$}$ zdDoh$mz;SNz4`$VNla0KI_ZvzJrRl0v7ITj=X`My^0B^s{)yQU{KM&G zR?4*wLTz9XRj;AsW13Lm_%!x~l?HQ)G86 z^k^Cq`n5>_4PJPA2fE|+iLXTu_**hZp%3(E;4CY#%PXBFz1aAQ_{+JIowo{Iyh?PJN4&E$=Pz6Biz3ahkT*l+XDXbo_qRSy3E!(u zrImw_LS{q$7=fTpS49+2oV?0y#6IQE8@}3FLWxcR&S76Tx9Ff~4y!7O#PB^txb#^; zs?OSvgs5f~2`~bbb`L=xe!BT`|1u>)qMWf4p(B#97-btT1r^NCe7X?W&*&)imzW>` zExOCJxZAu#-e%ry!T^De_`SG#ZP6WcG`<~n>7xdM(&-a2`IsCJQ?-Mef>`GsUCwXr z9k*VR<^$2-$}hLh1+y`GEf-yr&ZoZuFLl^BK{w=vRlm2*FUd*&6T>bMW$Jb{`9*hd zAzc2?UsK@FNNWmtUTP4H)HnPzW5ho7X>CM{;N@Z9C%?fGbrl+DA+RZ0ZeB$BT%K*Y zAvEdcTXd@In;r!HoCm!pNJ<|BL-v4kF6BBFKV%qOKmL`-9b~r;mBRW1qj5pLf6k6><1M^@&m^wJ|5bjiAk9DBp;m%VfY0aWXnpa49UIJ8GS!z&WcIw01543hYB;G&r;XllP zmDx7Jh9Uc2$Eh@@RFfEO(aD7A0m$!MC2?^?&hdi=(JjL=n|eP@5LD_K>JGb%MyLgE zjcYI1Isf?kx#%GY4MsqPT~!S&dqIqa&(7RGJ_H$6{x-sN-+ah28hhTdUhUdg-er{X z{BNUUZisjCN5viL6*vvjQVywUkPmaf(IKq4K&7;6UEa+{qkLXN+tY!w4A!OQ_QV-K zob2QZ+?x(cM;n4)0v_s_Nrxmm4U)s;OZ)JN+F+&7qY;a=;&rI_jN`dVsK`ZnbSh;u zLeIcQt}RN-t7{XC+ylB*uWnsiv?#YbLjSijlC$lpT}T-msV=7q?>l!duG>D@A^kfO zhVpwsF!OSATQ}{dF(0;VeCnmV4S#@X|4Pc%5NiHYwNp=$?S?wu29wAzG(dpzsUY0NWv7c(<6-yD3I>kOE_ z^3$k%Ud0`6mbKEb5VY0Ult(_ZBmrxBPeCEEki*g{TlhGwFv7cp@qs ziRnaG9lp}qd>g^ zD2(SrAt7^>pN08cTK}kQN%JNyK?=5rw3#G>v^vdn_nfjvRe_k+`{8M?TNFzj-oKp$A;XoEiig( z6M!ijNm`=bToOfDsPsfeqIS45qIL&Tsf$iZSaN}wA|YQ+vu4qYN10R``t+_IX;T{?2R?@hCiMml$0^RTNqc!tG6|KzR| zB|0yyL3guf9*VDdYkq@_k)}%pUU2<1If!!p8+H@JwA36-;)urOyp{b~etk7$H2_)J zZ83=B0Dtl7#xUI+lav>$0JyL^3Ve57rEK4}!jIc@=HGCLxmTAuKjs#kQJ%kNox3ryUtTJ-T{|j#rRNoPS%I4D{(OG zz_D$)yE>+{l6SRboH_eomDk7y6~}tLekk8HvBVSXq(`OQ&KEiG8Jt}-8hBLabyb1) zEIij+ZP65&-c(Y0R1ArTQoFQQYr!{FXaF8Y<2%7~Lz8P-Z4oGge8{ zBPCUf&yt<0Cuoo9_JHg`qQN=gP}!i1RoWn`m3Zgn8hGiDmYMoX=hmIyNlCc zZPB2|d4)mKkt?BX>U=Mt<4=AHNxYya*yM@_pQSM$s z@h4f?>2xt2)TFOqdqAl;TbyP&FKh!|*7;++VvJ{&^`#Km4BFH1xrJqy6k+A#`)OKCWATq1?Q}3UeQqRLFY7>e$ z{a+6Dq?R)0aKiodsB4`?}i|^5wE5ymEYft%KE@vRJqqbG*W9 z$yEcp55I=O(#Dv(a9nEXd_OVS;W|gUJ$zN=1Z2gh37TD8ubHcvN{14Qfps4iju56`u#Qb+RvWkR!Pc|)N%9;l9Nz4T^46Q zoLW}#)db}PCR-n)8T_+z92;wL#WG0X@$8haI!ED(ZaKlo??or!PW*-uCXT(>gx={6 zcjD`6vGn|q_mPa^q1g6!x(S*6g32i!w`t`9bu7)mYP!!JG(5GdRkB9bSe5!5%jinn z>n1qf6XBzZLdw)S=u)R!vgFGC=JK5;P?l{n5Y|aI@q%|vZ_Dou%+&D)NX4ZG#7XF} zT9nzG-b&GzQEi1|FVs<&TX$KBhk9PSz73bls)P+|e>=L4+?QH?jQMpIy$sp3(r8Oj zE4vS?^Y)M7_K`3ze4!*qC(6%IY(PF|@;w_UC|~xZnV%&{cA&j!lmHR)IpA8#a+&p-zc05(4&u&z5 z$GFgw>zx-Hak#H((9qThqwS2NqzLN|+w2Q)s!h;IU%;~CYAf;QK`d{Ra1X8mks^rE z>cC?>_H&Za=KFYO@P>`L5~T(r@K3Pi6L!@w1pj+r6ob zk-GP749xj5yVh9#N$$QeW>*U9=j(q`pS8RjG^O{#3sT8)divkgTwg%msXutnzqQ|< z>ul`j(ZwiEESk=I{AtnO4$iirb@tyYxoH%<1d1nSW=pmo|G)}bOgyA%$i{ZMY32&` zfv1rXz7~@#3)>UTX zyGuzOktL5spKycw>GK?pCi;T6J(E_#kx#7;5e^{%f*z|A-$h08toovZ;et3!ZbRAp zRxqtpoUd0pkg2!Pe)>V7IJa?{bE$B|OuLVTQJ~t#Zy$oj`D?2Www#{(4MF&U)Ntcn z_g8;r4po@$O9%AJ^%4e->rdXC*?E&xQjAiIZoiJ1y+=_B#|9kAPQ8pbt|ESW3Q;}t z-xA>PzAH3qGbXaqz|S>*TTkK|ig^)pk(nCYDt`!2AQ^M(_(IM+ecXoXL<0)n$?3uC zzkWsg8&3vrIi(fN`$?PoHaYb6Pi;DuO&i@>JLf&gNHQ$oJlXcb(QG}13O(k|WG519 zlO*L`CQ)RYX&97thyY;T^=<*_1*) z*XjTaj_#?x$?xqVQK@L*!>-usco3=*eFO?zAMpu>nUCVWLxNx3e*N@$sJa>ch2(Pm zx{j;Oq-a1lad+)k-|OwRW1BJ7)g)Pye(bH={e0nP^HoNjT`<@4`pKoOl+troU&2;bgQg_<^tEiyK?bWDyh?AH%g(r!z7>{khU?m#u4(ES2x>Whn5@4Hct2y>hTZ17<6fq{5YUPW^$L-M+>$$g;f7eRgU6R8tOn9eO5#54k~A zhBvi59sT>8&MPyW*KE~-75BYLB%3tVtc>lj`W9kcV@17PE4DzdaaelpV@iC;p3o&3 zesj(>&s7n9nIv_uGTkOHh_3Dst2~$2-&mO0-4IZ(AnfOUNHUH!fmHACtZoib8KOnE zJL+W35_P9V>E|YUvP7bBJss)>jmQP6cT#mU)!5Q=PtDxSrbfd8QuHhmul{0xD8{+B zoq-Umm7<@Kwgd>4f(?t`4BFO`6LqtBg+cV%)7H56tKn1#v0+alQgmh@ZnnH`J~8L2=jGsvg(og)90Ki zV&5(gMZVj}JbMZU>cZZT6u`XO0_Hsy!ksu%JI4K%yDFS=Cu{Y2t}=x1*Te(6GKV=1 zLa@E!Gu^nnIEn%4G9DqhFU$Vx{#mjZJqmf4+tru)T#Buid~@G95L&{OG*TyPZkowf zzeLsM?=hpuBz@^S))vzi+mA4-njX>JMN>xOD0D!`pnV!CBPny}j9u9In>Z~KGW!=~ bkGRsG%#`wHPkfWCDFL)K4AjdI4`2KTXn`4g diff --git a/packages/server/modules/emails/services/verification/request.ts b/packages/server/modules/emails/services/verification/request.ts index 5547b33cb..694fd684a 100644 --- a/packages/server/modules/emails/services/verification/request.ts +++ b/packages/server/modules/emails/services/verification/request.ts @@ -16,7 +16,7 @@ import { import { GetUser } from '@/modules/core/domain/users/operations' import { GetServerInfo } from '@/modules/core/domain/server/operations' -const EMAIL_SUBJECT = 'Speckle Account E-mail Verification' +const EMAIL_SUBJECT = 'Speckle account email verification' type CreateNewVerificationDeps = { getUser: GetUser @@ -101,11 +101,11 @@ const createNewEmailVerificationFactory = } function buildMjmlBody(verificationCode: string) { - const bodyStart = `

You have just registered to the Speckle server, or initiated the email verification process manually. To finalize the verification process, use the code below.

- ${verificationCode} -

This code will expire in 5 minutes. Please do not disclose this code to others.

-

If you did not make this request, please disregard this email.

-

See you soon,
Speckle

` + const bodyStart = `You have just registered to the Speckle server, or initiated the email verification process manually. To finalize the verification process, use the code below. + ${verificationCode} + This code will expire in 5 minutes. Please do not disclose this code to others. + If you did not make this request, please disregard this email. + See you soon,
Speckle
` return { bodyStart } } diff --git a/packages/server/modules/emails/tests/verifications.spec.ts b/packages/server/modules/emails/tests/verifications.spec.ts index 6fb9eb028..75b9f24b3 100644 --- a/packages/server/modules/emails/tests/verifications.spec.ts +++ b/packages/server/modules/emails/tests/verifications.spec.ts @@ -92,7 +92,7 @@ describe('Email verifications @emails', () => { const emailParams = sendEmailInvocations.args[0][0] expect(emailParams).to.be.ok - expect(emailParams.subject).to.contain('Speckle Account E-mail Verification') + expect(emailParams.subject).to.contain('Speckle account email verification') const verification = await getPendingToken({ email: newGuy.email }) expect(verification).to.be.ok @@ -157,7 +157,7 @@ describe('Email verifications @emails', () => { const emailParams = sendEmailInvocations.args[0][0] expect(emailParams).to.be.ok - expect(emailParams.subject).to.contain('Speckle Account E-mail Verification') + expect(emailParams.subject).to.contain('Speckle account email verification') expect(emailParams.html).to.be.ok expect(emailParams.text).to.be.ok diff --git a/packages/server/modules/gatekeeper/services/trialEmails.ts b/packages/server/modules/gatekeeper/services/trialEmails.ts index 424856814..40a9d8f31 100644 --- a/packages/server/modules/gatekeeper/services/trialEmails.ts +++ b/packages/server/modules/gatekeeper/services/trialEmails.ts @@ -31,21 +31,17 @@ const buildMjmlBody = ({ expiresInDays === 0 ? `today` : `in ${expiresInDays} days` - const bodyStart = ` + const bodyStart = ` Hi ${workspaceAdmin.name}!

The trial for your workspace ${workspace.name} expires ${expireMessage}.
-
Upgrade to a paid plan before the trial expires to keep using your workspace. You can compare plans and get an overview of your estimated billing from your workspace's billing settings. -
-
-
` - const bodyEnd = ` -Have questions or feedback? Please write us at hello@speckle.systems and we'd be more than happy to talk. + const bodyEnd = ` +Have questions or feedback?
Please write us at hello@speckle.systems and we'd be more than happy to talk.
` return { bodyStart, bodyEnd } } diff --git a/packages/server/modules/notifications/services/handlers/mentionedInComment.ts b/packages/server/modules/notifications/services/handlers/mentionedInComment.ts index ca411c45a..c8dc9bb7a 100644 --- a/packages/server/modules/notifications/services/handlers/mentionedInComment.ts +++ b/packages/server/modules/notifications/services/handlers/mentionedInComment.ts @@ -111,14 +111,14 @@ function buildEmailTemplateMjml( return { bodyStart: ` - + Hello,

${author.name} has just mentioned you in a comment on the ${stream.name} project. Please click on the button below to see the comment.
`, - bodyEnd: undefined + bodyEnd: `

` } } diff --git a/packages/server/modules/notifications/services/handlers/newStreamAccessRequest.ts b/packages/server/modules/notifications/services/handlers/newStreamAccessRequest.ts index d2d5751f5..7d46e249d 100644 --- a/packages/server/modules/notifications/services/handlers/newStreamAccessRequest.ts +++ b/packages/server/modules/notifications/services/handlers/newStreamAccessRequest.ts @@ -82,14 +82,14 @@ function buildEmailTemplateHtml( const { requester, stream } = state return { - bodyStart: ` + bodyStart: ` Hello,

${requester.name} requested access to the ${stream.name} project. You can add them as a collaborator by clicking the button below.
`, - bodyEnd: ` + bodyEnd: ` You received this email because you are an owner on ${stream.name}. ` } diff --git a/packages/server/modules/notifications/services/handlers/streamAccessRequestApproved.ts b/packages/server/modules/notifications/services/handlers/streamAccessRequestApproved.ts index 28e7e803b..b852486f1 100644 --- a/packages/server/modules/notifications/services/handlers/streamAccessRequestApproved.ts +++ b/packages/server/modules/notifications/services/handlers/streamAccessRequestApproved.ts @@ -62,13 +62,13 @@ function buildEmailTemplateMjml( const { stream } = state return { - bodyStart: ` + bodyStart: ` Hello,

You have just been granted access to the ${stream.name} project. Check it out below:
`, - bodyEnd: ` + bodyEnd: ` You received this email because you requested access to this project ` } diff --git a/packages/server/modules/pwdreset/services/request.ts b/packages/server/modules/pwdreset/services/request.ts index f584c99b0..dcfd854b4 100644 --- a/packages/server/modules/pwdreset/services/request.ts +++ b/packages/server/modules/pwdreset/services/request.ts @@ -62,9 +62,9 @@ function buildResetLink(token: PasswordResetTokenRecord) { } function buildMjmlBody() { - const bodyStart = `Hello,

You have just requested a password reset a few moments ago for your Speckle account. Please click on the button below to complete the process:
` + const bodyStart = `Hello,

You have just requested a password reset a few moments ago for your Speckle account. Please click on the button below to complete the process:
` - const bodyEnd = `The link above is valid for 1 hour. If you didn't request a password reset, feel free to ignore this email - nothing will happen, and your account is secure.` + const bodyEnd = `The link above is valid for 1 hour. If you didn't request a password reset, feel free to ignore this email - nothing will happen, and your account is secure.` return { bodyStart, diff --git a/packages/server/modules/serverinvites/services/coreEmailContents.ts b/packages/server/modules/serverinvites/services/coreEmailContents.ts index e259dfb47..ffd1a9e8b 100644 --- a/packages/server/modules/serverinvites/services/coreEmailContents.ts +++ b/packages/server/modules/serverinvites/services/coreEmailContents.ts @@ -23,7 +23,7 @@ function buildServerMjmlPreamble(params: Parameters[0] const { message } = invite const bodyStart = ` - + Hello!

@@ -37,7 +37,7 @@ function buildServerMjmlPreamble(params: Parameters[0] return { bodyStart, bodyEnd: - 'Feel free to ignore this invite if you do not know the person sending it.' + 'Feel free to ignore this invite if you do not know the person sending it.' } } @@ -101,7 +101,7 @@ function buildProjectMjmlPreamble( const { message } = invite const bodyStart = ` - + Hello!

@@ -117,7 +117,7 @@ function buildProjectMjmlPreamble( return { bodyStart, bodyEnd: - 'Feel free to ignore this invite if you do not know the person sending it.' + 'Feel free to ignore this invite if you do not know the person sending it.' } } diff --git a/packages/server/modules/workspaces/services/invites.ts b/packages/server/modules/workspaces/services/invites.ts index 9c8624fa2..e6c5e7c3d 100644 --- a/packages/server/modules/workspaces/services/invites.ts +++ b/packages/server/modules/workspaces/services/invites.ts @@ -326,7 +326,7 @@ export const buildWorkspaceInviteEmailContentsFactory = const mjml = { bodyStart: ` - + Hello!

@@ -334,7 +334,7 @@ export const buildWorkspaceInviteEmailContentsFactory =
`, bodyEnd: - 'Feel free to ignore this invite if you do not know the person sending it.' + 'Feel free to ignore this invite if you do not know the person sending it.' } const text = { bodyStart: `Hello! diff --git a/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/approved.ts b/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/approved.ts index 9bef04dcb..2180cba24 100644 --- a/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/approved.ts +++ b/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/approved.ts @@ -13,18 +13,15 @@ const buildMjmlBody = ({ workspace, requester }: WorkspaceJoinRequestApprovedEmailArgs) => { - const bodyStart = ` + const bodyStart = ` Hi ${requester.name}!

You are now a member of the workspace ${workspace.name}. -
-
-
` - const bodyEnd = ` -Have questions or feedback? Please write us at hello@speckle.systems and we'd be more than happy to talk. + const bodyEnd = ` +Have questions or feedback?
Please write us at hello@speckle.systems and we'd be more than happy to talk.
` return { bodyStart, bodyEnd } } diff --git a/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/denied.ts b/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/denied.ts index 8405f0341..8868f652e 100644 --- a/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/denied.ts +++ b/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/denied.ts @@ -13,18 +13,15 @@ const buildMjmlBody = ({ workspace, requester }: WorkspaceJoinRequestDeniedEmailArgs) => { - const bodyStart = ` + const bodyStart = ` Hi ${requester.name}!

Your request to join the workspace ${workspace.name} was denied by the workspace admin. -
-
-
` - const bodyEnd = ` -Have questions or feedback? Please write us at hello@speckle.systems and we'd be more than happy to talk. + const bodyEnd = ` +Have questions or feedback?
Please write us at hello@speckle.systems and we'd be more than happy to talk.
` return { bodyStart, bodyEnd } } diff --git a/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/received.ts b/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/received.ts index 6ab9188b1..95366b533 100644 --- a/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/received.ts +++ b/packages/server/modules/workspaces/services/workspaceJoinRequestEmails/received.ts @@ -19,18 +19,14 @@ const buildMjmlBody = ({ requester, workspaceAdmin }: WorkspaceJoinRequestReceivedEmailArgs) => { - const bodyStart = ` + const bodyStart = ` Hi ${workspaceAdmin.name}!
-
${requester.name} is requesting to join your workspace ${workspace.name}. -
-
-
` - const bodyEnd = ` -Have questions or feedback? Please write us at hello@speckle.systems and we'd be more than happy to talk. + const bodyEnd = ` +Have questions or feedback?
Please write us at hello@speckle.systems and we'd be more than happy to talk.
` return { bodyStart, bodyEnd } }