package mail import ( "fmt" "time" ) // VerifyWindow is how long a verification or invitation link stays usable. It // is stated in the email, so it lives beside the message rather than in the // caller. const VerifyWindow = 24 * time.Hour // SendVerification asks someone to confirm the address they signed up with. // The link is built from the Sender's PublicURL, because the address of the // portal is a property of the deployment, not of the call site. func (s Sender) SendVerification(to, token string) error { return s.sendTemplate(to, "", "verification", struct { Link string TTLHours int }{ Link: fmt.Sprintf("%s/verify?token=%s", s.PublicURL, token), TTLHours: int(VerifyWindow.Hours()), }) } // SendInvite asks someone to join an existing account and set their own // password. It names the account, because an unexpected invitation from a // service you have never used is otherwise indistinguishable from spam. func (s Sender) SendInvite(to, accountName, token string) error { return s.sendTemplate(to, "", "invite", struct { AccountName string Link string }{ AccountName: accountName, Link: fmt.Sprintf("%s/accept-invite?token=%s", s.PublicURL, token), }) }