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:
parent
3b0291d94c
commit
2298ac3376
9 changed files with 720 additions and 697 deletions
|
@ -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,
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
}
|
||||
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue