@@ -26,6 +26,20 @@ const formatFromAddress = (email_address) => {
2626
2727 return `urBackend <${ trimmed } >` ;
2828} ;
29+
30+ const generateDynamicFromAddress = ( projectName ) => {
31+ const rawPname = projectName || "urBackend" ;
32+ let safeEmailHandle = rawPname . replace ( / [ ^ a - z A - Z 0 - 9 ] / g, '' ) . toLowerCase ( ) ;
33+ if ( safeEmailHandle . length < 3 ) {
34+ safeEmailHandle = "urbackend" ;
35+ }
36+ safeEmailHandle = safeEmailHandle . substring ( 0 , 30 ) ;
37+ const safeDisplayName = rawPname . replace ( / [ \r \n ] / g, '' ) . trim ( ) ;
38+ const finalDisplayName = / ^ [ a - z A - Z 0 - 9 ] + $ / . test ( safeDisplayName )
39+ ? safeDisplayName
40+ : `"${ safeDisplayName . replace ( / \\ / g, '\\\\' ) . replace ( / " / g, '\\"' ) } "` ;
41+ return `${ finalDisplayName } <${ safeEmailHandle } @apps.bitbros.in>` ;
42+ } ;
2943
3044const defaultFromAddress = formatFromAddress ( process . env . EMAIL_FROM ) ;
3145const replyToAddress = process . env . EMAIL_REPLY_TO ?. trim ( ) || "urbackend@apps.bitbros.in" ;
@@ -165,19 +179,7 @@ async function sendReleaseEmail(email, { version, title, content, changelogUrl }
165179 // FUNCTION - SEND AUTH OTP EMAIL
166180async function sendAuthOtpEmail ( email , { otp, type, pname, byokKey, byokFrom } ) {
167181 const rawPname = pname || "urBackend" ;
168-
169- let safeEmailHandle = rawPname . replace ( / [ ^ a - z A - Z 0 - 9 ] / g, '' ) . toLowerCase ( ) ;
170- if ( safeEmailHandle . length < 3 ) {
171- safeEmailHandle = "urbackend" ;
172- }
173- safeEmailHandle = safeEmailHandle . substring ( 0 , 30 ) ;
174-
175182 const safeProjectNameHtml = escapeHtml ( rawPname ) ;
176-
177- const safeDisplayName = rawPname . replace ( / [ \r \n ] / g, '' ) . trim ( ) ;
178- const finalDisplayName = / ^ [ a - z A - Z 0 - 9 ] + $ / . test ( safeDisplayName )
179- ? safeDisplayName
180- : `"${ safeDisplayName . replace ( / \\ / g, '\\\\' ) . replace ( / " / g, '\\"' ) } "` ;
181183
182184 const isVerify = type === 'verification' ;
183185 const subject = isVerify ? "Verify your account" : "Reset your password" ;
@@ -226,7 +228,7 @@ async function sendAuthOtpEmail(email, { otp, type, pname, byokKey, byokFrom })
226228 let mailClient = resend ;
227229 let fromAddress = process . env . EMAIL_FROM
228230 ? formatFromAddress ( process . env . EMAIL_FROM )
229- : ` ${ finalDisplayName } < ${ safeEmailHandle } .urbackend@apps.bitbros.in>` ;
231+ : generateDynamicFromAddress ( rawPname ) ;
230232
231233 if ( byokKey ) {
232234 mailClient = new Resend ( byokKey ) ;
@@ -384,4 +386,12 @@ urBackend Team`;
384386 }
385387}
386388
387- module . exports = { sendOtp, sendReleaseEmail, sendAuthOtpEmail, sendProRequestConfirmationEmail, sendExportReadyEmail } ;
389+ module . exports = {
390+ sendOtp,
391+ sendReleaseEmail,
392+ sendAuthOtpEmail,
393+ sendProRequestConfirmationEmail,
394+ sendExportReadyEmail,
395+ formatFromAddress,
396+ generateDynamicFromAddress
397+ } ;
0 commit comments