mirror of
https://github.com/neilalexander/yggmail.git
synced 2026-05-22 11:06:29 +03:00
Onboarding, Sent box and Outbox (#45)
* main - Set * Working * Welcome - Added welcome message generation * Smtpsender - On successful SMTP send create the "Sent" box and then try move from "Outbox" to "Sent" * Sent box - Create the mailbox in `main.go` and not every time we try move from `Outbox` to `Sent` * Use logegr * USer - Added logger pointer (and made use of it) - Disallow renaming or deletion of 'Sent' * When creating a new user set it up with logger * Encoded message * Added tests * Send a welcome mail on startup (soon to mke it only happen once) * try set flags * Onboarding flag set * Sender - Removed testing code * Welcome - Moved welcomer code * Cleaned up * Added more * renamed package * Removed comment * welcome - FIxed variable names * welcome - Removed semi-colons - Fixed imports * welcome - Ran `gofmt` * welcome test - Fixed up * h * main - Ran `gofmt` * Main - Fxied * Welcome - Foxed name * Added `.gitignore` * Mailbox - Disabled print logging * Fixed * fixedg * fixe and use `%v`
This commit is contained in:
committed by
GitHub
parent
fa32249f2f
commit
8bf3ba5f47
109
internal/welcome/welcome.go
Normal file
109
internal/welcome/welcome.go
Normal file
@@ -0,0 +1,109 @@
|
||||
package welcome
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"github.com/emersion/go-message"
|
||||
"github.com/neilalexander/yggmail/internal/storage"
|
||||
"log"
|
||||
)
|
||||
|
||||
const (
|
||||
WEBSITE_URL = "https://github.com/neilalexander/yggmail"
|
||||
CODE_URL = "https://github.com/neilalexander/yggmail"
|
||||
)
|
||||
|
||||
func Onboard(user string, storage storage.Storage, log *log.Logger) {
|
||||
// Fetch onboarding status
|
||||
if f, e := storage.ConfigGet("onboarding_done"); e == nil {
|
||||
|
||||
// If we haven't onboarded yet
|
||||
if len(f) == 0 {
|
||||
log.Printf("Performing onboarding...\n")
|
||||
|
||||
// takes in addr and output writer
|
||||
welcomeMsg, e := welcomeMessageFor(user)
|
||||
if e != nil {
|
||||
log.Println("Failure to generate welcome message")
|
||||
}
|
||||
var welcomeId int
|
||||
if id, e := storage.MailCreate("INBOX", welcomeMsg); e != nil {
|
||||
log.Printf("Failed to store welcome message: %v\n", e)
|
||||
panic("See above")
|
||||
} else {
|
||||
welcomeId = id
|
||||
}
|
||||
|
||||
if storage.MailUpdateFlags("INBOX", welcomeId, false, false, false, false) != nil {
|
||||
panic("Could not set flags on onboarding message")
|
||||
}
|
||||
|
||||
// set flag to never do it again
|
||||
if storage.ConfigSet("onboarding_done", "true") != nil {
|
||||
panic("Error storing onboarding flag")
|
||||
}
|
||||
|
||||
log.Printf("Onboarding done\n")
|
||||
} else {
|
||||
log.Printf("Onboarding not required\n")
|
||||
}
|
||||
} else {
|
||||
panic("Error fetching onboarding status")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func welcomeMessageFor(yourYggMailAddr string) ([]byte, error) {
|
||||
var hdr = welcomeTo(yourYggMailAddr)
|
||||
|
||||
var buff = bytes.NewBuffer([]byte{})
|
||||
|
||||
// writer writes to underlying writer (our buffer)
|
||||
// but returns a writer just for the body part
|
||||
// (it will encode header to underlying writer
|
||||
// first)
|
||||
msgWrt, e := message.CreateWriter(buff, hdr)
|
||||
if e != nil {
|
||||
return nil, e
|
||||
}
|
||||
|
||||
var formattedBody = fmt.Sprintf(welcomeBody, yourYggMailAddr, WEBSITE_URL, CODE_URL)
|
||||
|
||||
if _, e := msgWrt.Write([]byte(formattedBody)); e != nil {
|
||||
return nil, e
|
||||
}
|
||||
// var ent, e = message.New(hdr, body_rdr)
|
||||
|
||||
return buff.Bytes(), nil
|
||||
}
|
||||
|
||||
var welcomeSubject = "Welcome to Yggmail!"
|
||||
var welcomeBody = `
|
||||
Hey <b>%s</b>!
|
||||
|
||||
We'd like to welcome you to Yggmail!
|
||||
|
||||
You're about to embark in both a revolution and an
|
||||
evolution as you know it. The revolution is that this
|
||||
mailing system uses the new and experimental Yggdrasil
|
||||
internet routing system, the evolution is that it's
|
||||
good old email as you know it.
|
||||
|
||||
Want to learn more? See the <a href="%s">website</a>
|
||||
|
||||
Thinking of contributing; we'd be more than happy
|
||||
to work together. Our project is hosted on <a href="%s">GitHub</a>.
|
||||
`
|
||||
|
||||
func welcomeTo(yourYggMailAddr string) message.Header {
|
||||
// header would be a nice preview of what to expect
|
||||
// of the message
|
||||
var welcomeHdr = message.Header{}
|
||||
welcomeHdr.Add("From", "Yggmail Team")
|
||||
welcomeHdr.Add("To", yourYggMailAddr+"@yggmail")
|
||||
welcomeHdr.Add("Subject", welcomeSubject)
|
||||
// FIXME: Add content-type entry here
|
||||
|
||||
fmt.Printf("Generated welcome mesg '%v'\n", welcomeHdr)
|
||||
return welcomeHdr
|
||||
}
|
||||
Reference in New Issue
Block a user