1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-26 00:29:47 +02:00

Set ReplyTo for SMTP based notifications

Ensure all replies go back to person who initiated the notification.
This commit is contained in:
sauls8t 2018-05-03 18:03:25 +01:00
parent 3b0291d94c
commit 2298ac3376
9 changed files with 720 additions and 697 deletions

View file

@ -20,19 +20,21 @@ import (
)
// DocumentApprover notifies user who has just been granted document approval rights.
func (m *Mailer) DocumentApprover(recipient, inviter, url, document string) {
func (m *Mailer) DocumentApprover(recipient, inviterName, inviterEmail, url, document string) {
method := "DocumentApprover"
m.Initialize()
// check inviter name
if inviter == "Hello You" || len(inviter) == 0 {
inviter = "Your colleague"
if inviterName == "Hello You" || len(inviterName) == 0 {
inviterName = "Your colleague"
}
em := smtp.EmailMessage{}
em.Subject = fmt.Sprintf("%s has granted you document approval", inviter)
em.Subject = fmt.Sprintf("%s has granted you document approval", inviterName)
em.ToEmail = recipient
em.ToName = recipient
em.ReplyTo = inviterEmail
em.ReplyName = inviterName
parameters := struct {
Subject string
@ -41,7 +43,7 @@ func (m *Mailer) DocumentApprover(recipient, inviter, url, document string) {
Document string
}{
em.Subject,
inviter,
inviterName,
url,
document,
}

View file

@ -18,19 +18,21 @@ import (
)
// ShareSpaceExistingUser provides an existing user with a link to a newly shared space.
func (m *Mailer) ShareSpaceExistingUser(recipient, inviter, url, folder, intro string) {
func (m *Mailer) ShareSpaceExistingUser(recipient, inviterName, inviterEmail, url, folder, intro string) {
method := "ShareSpaceExistingUser"
m.Initialize()
// check inviter name
if inviter == "Hello You" || len(inviter) == 0 {
inviter = "Your colleague"
if inviterName == "Hello You" || len(inviterName) == 0 {
inviterName = "Your colleague"
}
em := smtp.EmailMessage{}
em.Subject = fmt.Sprintf("%s has shared %s with you", inviter, folder)
em.Subject = fmt.Sprintf("%s has shared %s with you", inviterName, folder)
em.ToEmail = recipient
em.ToName = recipient
em.ReplyTo = inviterEmail
em.ReplyName = inviterName
parameters := struct {
Subject string
@ -40,7 +42,7 @@ func (m *Mailer) ShareSpaceExistingUser(recipient, inviter, url, folder, intro s
Intro string
}{
em.Subject,
inviter,
inviterName,
url,
folder,
intro,
@ -63,19 +65,21 @@ func (m *Mailer) ShareSpaceExistingUser(recipient, inviter, url, folder, intro s
}
// ShareSpaceNewUser invites new user providing Credentials, explaining the product and stating who is inviting them.
func (m *Mailer) ShareSpaceNewUser(recipient, inviter, url, space, invitationMessage string) {
func (m *Mailer) ShareSpaceNewUser(recipient, inviterName, inviterEmail, url, space, invitationMessage string) {
method := "ShareSpaceNewUser"
m.Initialize()
// check inviter name
if inviter == "Hello You" || len(inviter) == 0 {
inviter = "Your colleague"
if inviterName == "Hello You" || len(inviterName) == 0 {
inviterName = "Your colleague"
}
em := smtp.EmailMessage{}
em.Subject = fmt.Sprintf("%s has shared %s with you on Documize", inviter, space)
em.Subject = fmt.Sprintf("%s has shared %s with you on Documize", inviterName, space)
em.ToEmail = recipient
em.ToName = recipient
em.ReplyTo = inviterEmail
em.ReplyName = inviterName
parameters := struct {
Subject string
@ -85,7 +89,7 @@ func (m *Mailer) ShareSpaceNewUser(recipient, inviter, url, space, invitationMes
Folder string
}{
em.Subject,
inviter,
inviterName,
url,
invitationMessage,
space,

View file

@ -18,19 +18,21 @@ import (
)
// InviteNewUser invites someone new providing credentials, explaining the product and stating who is inviting them.
func (m *Mailer) InviteNewUser(recipient, inviter, url, username, password string) {
func (m *Mailer) InviteNewUser(recipient, inviterName, inviterEmail, url, username, password string) {
method := "InviteNewUser"
m.Initialize()
// check inviter name
if inviter == "Hello You" || len(inviter) == 0 {
inviter = "Your colleague"
if inviterName == "Hello You" || len(inviterName) == 0 {
inviterName = "Your colleague"
}
em := smtp.EmailMessage{}
em.Subject = fmt.Sprintf("%s has invited you to Documize", inviter)
em.Subject = fmt.Sprintf("%s has invited you to Documize", inviterName)
em.ToEmail = recipient
em.ToName = recipient
em.ReplyTo = inviterEmail
em.ReplyName = inviterName
parameters := struct {
Subject string
@ -40,7 +42,7 @@ func (m *Mailer) InviteNewUser(recipient, inviter, url, username, password strin
Password string
}{
em.Subject,
inviter,
inviterName,
url,
recipient,
password,
@ -63,19 +65,21 @@ func (m *Mailer) InviteNewUser(recipient, inviter, url, username, password strin
}
// InviteExistingUser invites a known user to an organization.
func (m *Mailer) InviteExistingUser(recipient, inviter, url string) {
func (m *Mailer) InviteExistingUser(recipient, inviterName, inviterEmail, url string) {
method := "InviteExistingUser"
m.Initialize()
// check inviter name
if inviter == "Hello You" || len(inviter) == 0 {
inviter = "Your colleague"
if inviterName == "Hello You" || len(inviterName) == 0 {
inviterName = "Your colleague"
}
em := smtp.EmailMessage{}
em.Subject = fmt.Sprintf("%s has invited you to their Documize account", inviter)
em.Subject = fmt.Sprintf("%s has invited you to their Documize account", inviterName)
em.ToEmail = recipient
em.ToName = recipient
em.ReplyTo = inviterEmail
em.ReplyName = inviterName
parameters := struct {
Subject string
@ -83,7 +87,7 @@ func (m *Mailer) InviteExistingUser(recipient, inviter, url string) {
URL string
}{
em.Subject,
inviter,
inviterName,
url,
}

View file

@ -200,7 +200,7 @@ func (h *Handler) SetSpacePermissions(w http.ResponseWriter, r *http.Request) {
}
mailer := mail.Mailer{Runtime: h.Runtime, Store: h.Store, Context: ctx}
go mailer.ShareSpaceExistingUser(existingUser.Email, inviter.Fullname(), url, sp.Name, model.Message)
go mailer.ShareSpaceExistingUser(existingUser.Email, inviter.Fullname(), inviter.Email, url, sp.Name, model.Message)
h.Runtime.Log.Info(fmt.Sprintf("%s is sharing space %s with existing user %s", inviter.Email, sp.Name, existingUser.Email))
}
}
@ -701,7 +701,7 @@ func (h *Handler) SetDocumentPermissions(w http.ResponseWriter, r *http.Request)
}
mailer := mail.Mailer{Runtime: h.Runtime, Store: h.Store, Context: ctx}
go mailer.DocumentApprover(existingUser.Email, inviter.Fullname(), url, doc.Title)
go mailer.DocumentApprover(existingUser.Email, inviter.Fullname(), inviter.Email, url, doc.Title)
h.Runtime.Log.Info(fmt.Sprintf("%s has made %s document approver for: %s", inviter.Email, existingUser.Email, doc.Title))
}
}

View file

@ -88,10 +88,12 @@ func Connect(c Config) (d *mail.Dialer, err error) {
// EmailMessage represents email to be sent.
type EmailMessage struct {
ToEmail string
ToName string
Subject string
BodyHTML string
ToEmail string
ToName string
Subject string
BodyHTML string
ReplyTo string
ReplyName string
}
// SendMessage sends email using specified SMTP connection
@ -102,6 +104,17 @@ func SendMessage(d *mail.Dialer, c Config, em EmailMessage) (b bool, err error)
m.SetHeader("From", m.FormatAddress(c.SenderEmail, c.SenderName))
m.SetHeader("To", m.FormatAddress(em.ToEmail, em.ToName))
// Where do replies go?
reply := c.SenderEmail
replyName := c.SenderName
if len(em.ReplyTo) > 0 {
reply = em.ReplyTo
}
if len(em.ReplyName) > 0 {
replyName = em.ReplyName
}
m.SetAddressHeader("Reply-To", reply, replyName)
// content
m.SetHeader("Subject", em.Subject)
m.SetBody("text/html", em.BodyHTML)

View file

@ -868,7 +868,7 @@ func (h *Handler) Invite(w http.ResponseWriter, r *http.Request) {
url := ctx.GetAppURL(fmt.Sprintf("s/%s/%s", sp.RefID, stringutil.MakeSlug(sp.Name)))
mailer := mail.Mailer{Runtime: h.Runtime, Store: h.Store, Context: ctx}
go mailer.ShareSpaceExistingUser(email, inviter.Fullname(), url, sp.Name, model.Message)
go mailer.ShareSpaceExistingUser(email, inviter.Fullname(), inviter.Email, url, sp.Name, model.Message)
h.Runtime.Log.Info(fmt.Sprintf("%s is sharing space %s with existing user %s", inviter.Email, sp.Name, email))
} else {

View file

@ -79,7 +79,7 @@ func inviteNewUserToSharedSpace(ctx domain.RequestContext, rt *env.Runtime, s *d
mailer := mail.Mailer{Runtime: rt, Store: s, Context: ctx}
url := fmt.Sprintf("%s/%s", baseURL, u.Salt)
go mailer.ShareSpaceNewUser(u.Email, invitedBy.Fullname(), url, sp.Name, invitationMessage)
go mailer.ShareSpaceNewUser(u.Email, invitedBy.Fullname(), invitedBy.Email, url, sp.Name, invitationMessage)
return
}

View file

@ -218,12 +218,12 @@ func (h *Handler) Add(w http.ResponseWriter, r *http.Request) {
url := fmt.Sprintf("%s/%s", ctx.GetAppURL("auth/sso"), url.QueryEscape(string(encrypted)))
mailer := mail.Mailer{Runtime: h.Runtime, Store: h.Store, Context: ctx}
go mailer.InviteNewUser(userModel.Email, inviter.Fullname(), url, userModel.Email, requestedPassword)
go mailer.InviteNewUser(userModel.Email, inviter.Fullname(), inviter.Email, url, userModel.Email, requestedPassword)
h.Runtime.Log.Info(fmt.Sprintf("%s invited by %s on %s", userModel.Email, inviter.Email, ctx.AppURL))
} else {
mailer := mail.Mailer{Runtime: h.Runtime, Store: h.Store, Context: ctx}
go mailer.InviteExistingUser(userModel.Email, inviter.Fullname(), ctx.GetAppURL(""))
go mailer.InviteExistingUser(userModel.Email, inviter.Fullname(), inviter.Email, ctx.GetAppURL(""))
h.Runtime.Log.Info(fmt.Sprintf("%s is giving access to an existing user %s", inviter.Email, userModel.Email))
}
@ -847,12 +847,12 @@ func (h *Handler) BulkImport(w http.ResponseWriter, r *http.Request) {
url := fmt.Sprintf("%s/%s", ctx.GetAppURL("auth/sso"), url.QueryEscape(string(encrypted)))
mailer := mail.Mailer{Runtime: h.Runtime, Store: h.Store, Context: ctx}
go mailer.InviteNewUser(userModel.Email, inviter.Fullname(), url, userModel.Email, requestedPassword)
go mailer.InviteNewUser(userModel.Email, inviter.Fullname(), inviter.Email, url, userModel.Email, requestedPassword)
h.Runtime.Log.Info(fmt.Sprintf("%s invited by %s on %s", userModel.Email, inviter.Email, ctx.AppURL))
} else {
mailer := mail.Mailer{Runtime: h.Runtime, Store: h.Store, Context: ctx}
go mailer.InviteExistingUser(userModel.Email, inviter.Fullname(), ctx.GetAppURL(""))
go mailer.InviteExistingUser(userModel.Email, inviter.Fullname(), inviter.Email, ctx.GetAppURL(""))
h.Runtime.Log.Info(fmt.Sprintf("%s is giving access to an existing user %s", inviter.Email, userModel.Email))
}

File diff suppressed because one or more lines are too long