@ -222,6 +222,7 @@ func (emailer *Emailer) constructConfirmation(code, username, key string, app *a
"ifItWasNotYou" : emailer . lang . Strings . get ( "ifItWasNotYou" ) ,
"confirmEmail" : emailer . lang . EmailConfirmation . get ( "confirmEmail" ) ,
"message" : "" ,
"username" : username ,
}
if noSub {
template [ "helloUser" ] = emailer . lang . Strings . get ( "helloUser" )
@ -237,14 +238,25 @@ func (emailer *Emailer) constructConfirmation(code, username, key string, app *a
template [ "confirmationURL" ] = inviteLink
template [ "message" ] = message
}
email . html , email . text , err = emailer . construct ( app , "email_confirmation" , "email_" , template )
if app . storage . customEmails . EmailConfirmation . Enabled {
content := app . storage . customEmails . EmailConfirmation . Content
for _ , v := range app . storage . customEmails . EmailConfirmation . Variables {
replaceWith , ok := template [ v [ 1 : len ( v ) - 1 ] ]
if ok {
content = strings . ReplaceAll ( content , v , replaceWith . ( string ) )
}
}
email , err = emailer . constructTemplate ( email . subject , content , app )
} else {
email . html , email . text , err = emailer . construct ( app , "email_confirmation" , "email_" , template )
}
if err != nil {
return nil , err
}
return email , nil
}
func ( emailer * Emailer ) constructAnnouncement ( subject , md string , app * appContext ) ( * Email , error ) {
func ( emailer * Emailer ) construct Template ( subject , md string , app * appContext ) ( * Email , error ) {
email := & Email { subject : subject }
renderer := html . NewRenderer ( html . RendererOptions { Flags : html . Smartypants } )
html := markdown . ToHTML ( [ ] byte ( md ) , nil , renderer )
@ -277,6 +289,9 @@ func (emailer *Emailer) constructInvite(code string, invite Invite, app *appCont
"toJoin" : emailer . lang . InviteEmail . get ( "toJoin" ) ,
"linkButton" : emailer . lang . InviteEmail . get ( "linkButton" ) ,
"message" : "" ,
"date" : d ,
"time" : t ,
"expiresInMinutes" : expiresIn ,
}
if noSub {
template [ "inviteExpiry" ] = emailer . lang . InviteEmail . get ( "inviteExpiry" )
@ -290,7 +305,18 @@ func (emailer *Emailer) constructInvite(code string, invite Invite, app *appCont
template [ "message" ] = message
}
var err error
email . html , email . text , err = emailer . construct ( app , "invite_emails" , "email_" , template )
if app . storage . customEmails . InviteEmail . Enabled {
content := app . storage . customEmails . InviteEmail . Content
for _ , v := range app . storage . customEmails . InviteEmail . Variables {
replaceWith , ok := template [ v [ 1 : len ( v ) - 1 ] ]
if ok {
content = strings . ReplaceAll ( content , v , replaceWith . ( string ) )
}
}
email , err = emailer . constructTemplate ( email . subject , content , app )
} else {
email . html , email . text , err = emailer . construct ( app , "invite_emails" , "email_" , template )
}
if err != nil {
return nil , err
}
@ -305,14 +331,27 @@ func (emailer *Emailer) constructExpiry(code string, invite Invite, app *appCont
template := map [ string ] interface { } {
"inviteExpired" : emailer . lang . InviteExpiry . get ( "inviteExpired" ) ,
"notificationNotice" : emailer . lang . InviteExpiry . get ( "notificationNotice" ) ,
"code" : "\"" + code + "\"" ,
"time" : expiry ,
}
if noSub {
template [ "expiredAt" ] = emailer . lang . InviteExpiry . get ( "expiredAt" )
} else {
template [ "expiredAt" ] = emailer . lang . InviteExpiry . template ( "expiredAt" , tmpl { "code" : "\"" + code + "\"" , "time" : expiry } )
template [ "expiredAt" ] = emailer . lang . InviteExpiry . template ( "expiredAt" , tmpl { "code" : template [ "code" ] . ( string ) , "time" : template [ "time" ] . ( string ) } )
}
var err error
email . html , email . text , err = emailer . construct ( app , "notifications" , "expiry_" , template )
if app . storage . customEmails . InviteExpiry . Enabled {
content := app . storage . customEmails . InviteExpiry . Content
for _ , v := range app . storage . customEmails . InviteExpiry . Variables {
replaceWith , ok := template [ v [ 1 : len ( v ) - 1 ] ]
if ok {
content = strings . ReplaceAll ( content , v , replaceWith . ( string ) )
}
}
email , err = emailer . constructTemplate ( email . subject , content , app )
} else {
email . html , email . text , err = emailer . construct ( app , "notifications" , "expiry_" , template )
}
if err != nil {
return nil , err
}
@ -328,6 +367,7 @@ func (emailer *Emailer) constructCreated(code, username, address string, invite
"addressString" : emailer . lang . Strings . get ( "emailAddress" ) ,
"timeString" : emailer . lang . UserCreated . get ( "time" ) ,
"notificationNotice" : "" ,
"code" : "\"" + code + "\"" ,
}
if noSub {
template [ "aUserWasCreated" ] = emailer . lang . UserCreated . get ( "aUserWasCreated" )
@ -343,14 +383,25 @@ func (emailer *Emailer) constructCreated(code, username, address string, invite
} else {
tplAddress = address
}
template [ "aUserWasCreated" ] = emailer . lang . UserCreated . template ( "aUserWasCreated" , tmpl { "code" : "\"" + code + "\"" } )
template [ "aUserWasCreated" ] = emailer . lang . UserCreated . template ( "aUserWasCreated" , tmpl { "code" : template [ "code" ] . ( string ) } )
template [ "name" ] = username
template [ "address" ] = tplAddress
template [ "time" ] = created
template [ "notificationNotice" ] = emailer . lang . UserCreated . get ( "notificationNotice" )
}
var err error
email . html , email . text , err = emailer . construct ( app , "notifications" , "created_" , template )
if app . storage . customEmails . UserCreated . Enabled {
content := app . storage . customEmails . UserCreated . Content
for _ , v := range app . storage . customEmails . UserCreated . Variables {
replaceWith , ok := template [ v [ 1 : len ( v ) - 1 ] ]
if ok {
content = strings . ReplaceAll ( content , v , replaceWith . ( string ) )
}
}
email , err = emailer . constructTemplate ( email . subject , content , app )
} else {
email . html , email . text , err = emailer . construct ( app , "notifications" , "created_" , template )
}
if err != nil {
return nil , err
}
@ -369,6 +420,10 @@ func (emailer *Emailer) constructReset(pwr PasswordReset, app *appContext, noSub
"ifItWasNotYou" : emailer . lang . Strings . get ( "ifItWasNotYou" ) ,
"pinString" : emailer . lang . PasswordReset . get ( "pin" ) ,
"message" : "" ,
"username" : pwr . Username ,
"date" : d ,
"time" : t ,
"expiresInMinutes" : expiresIn ,
}
if noSub {
template [ "helloUser" ] = emailer . lang . Strings . get ( "helloUser" )
@ -384,7 +439,18 @@ func (emailer *Emailer) constructReset(pwr PasswordReset, app *appContext, noSub
template [ "message" ] = message
}
var err error
email . html , email . text , err = emailer . construct ( app , "password_resets" , "email_" , template )
if app . storage . customEmails . PasswordReset . Enabled {
content := app . storage . customEmails . PasswordReset . Content
for _ , v := range app . storage . customEmails . PasswordReset . Variables {
replaceWith , ok := template [ v [ 1 : len ( v ) - 1 ] ]
if ok {
content = strings . ReplaceAll ( content , v , replaceWith . ( string ) )
}
}
email , err = emailer . constructTemplate ( email . subject , content , app )
} else {
email . html , email . text , err = emailer . construct ( app , "password_resets" , "email_" , template )
}
if err != nil {
return nil , err
}
@ -410,7 +476,18 @@ func (emailer *Emailer) constructDeleted(reason string, app *appContext, noSub b
template [ "message" ] = app . config . Section ( "email" ) . Key ( "message" ) . String ( )
}
var err error
email . html , email . text , err = emailer . construct ( app , "deletion" , "email_" , template )
if app . storage . customEmails . UserDeleted . Enabled {
content := app . storage . customEmails . UserDeleted . Content
for _ , v := range app . storage . customEmails . UserDeleted . Variables {
replaceWith , ok := template [ v [ 1 : len ( v ) - 1 ] ]
if ok {
content = strings . ReplaceAll ( content , v , replaceWith . ( string ) )
}
}
email , err = emailer . constructTemplate ( email . subject , content , app )
} else {
email . html , email . text , err = emailer . construct ( app , "deletion" , "email_" , template )
}
if err != nil {
return nil , err
}
@ -439,7 +516,18 @@ func (emailer *Emailer) constructWelcome(username string, app *appContext, noSub
template [ "message" ] = app . config . Section ( "email" ) . Key ( "message" ) . String ( )
}
var err error
email . html , email . text , err = emailer . construct ( app , "welcome_email" , "email_" , template )
if app . storage . customEmails . WelcomeEmail . Enabled {
content := app . storage . customEmails . WelcomeEmail . Content
for _ , v := range app . storage . customEmails . WelcomeEmail . Variables {
replaceWith , ok := template [ v [ 1 : len ( v ) - 1 ] ]
if ok {
content = strings . ReplaceAll ( content , v , replaceWith . ( string ) )
}
}
email , err = emailer . constructTemplate ( email . subject , content , app )
} else {
email . html , email . text , err = emailer . construct ( app , "welcome_email" , "email_" , template )
}
if err != nil {
return nil , err
}
@ -448,5 +536,6 @@ func (emailer *Emailer) constructWelcome(username string, app *appContext, noSub
// calls the send method in the underlying emailClient.
func ( emailer * Emailer ) send ( email * Email , address ... string ) error {
fmt . Printf ( "%+v\n" , email )
return emailer . sender . send ( emailer . fromName , emailer . fromAddr , email , address ... )
}