From ef845700487c6a7932d4f6e9ce936c2989b21e39 Mon Sep 17 00:00:00 2001 From: Maas Lalani Date: Thu, 25 Apr 2024 10:23:52 -0400 Subject: [PATCH] Save email body to tmp file when error (#64) * store email body when send fails * increase error display duration * feat: save email body --------- Co-authored-by: Allan Martinez --- email.go | 22 ++++++++++++++++++++++ go.work | 5 ----- go.work.sum | 20 -------------------- model.go | 2 +- 4 files changed, 23 insertions(+), 26 deletions(-) delete mode 100644 go.work delete mode 100644 go.work.sum diff --git a/email.go b/email.go index 12fe121..1723bd4 100644 --- a/email.go +++ b/email.go @@ -4,6 +4,7 @@ import ( "bytes" "crypto/tls" "errors" + "fmt" "os" "path/filepath" "strings" @@ -48,6 +49,10 @@ func (m Model) sendEmailCmd() tea.Cmd { err = errors.New("[ERROR]: unknown delivery method") } if err != nil { + path, storeErr := saveTmp(m.Body.Value()) + if storeErr == nil { + err = fmt.Errorf("%w\nEmail saved to: %s", err, path) + } return sendEmailFailureMsg(err) } return sendEmailSuccessMsg{} @@ -183,3 +188,20 @@ func makeAttachments(paths []string) []resend.Attachment { return attachments } + +// saveTmp is a helper function that stores a string in a temporary file. +// It returns the path of the file created. +func saveTmp(s string) (string, error) { + f, err := os.CreateTemp("", fmt.Sprintf("pop-%s-*.txt", time.Now().Format("2006-01-02"))) + if err != nil { + return "", fmt.Errorf("creating temp file: %w", err) + } + defer f.Close() + + _, err = f.WriteString(s) + if err != nil { + return "", fmt.Errorf("error writing to %s: %w", f.Name(), err) + } + + return f.Name(), nil +} diff --git a/go.work b/go.work deleted file mode 100644 index 4f3c9a4..0000000 --- a/go.work +++ /dev/null @@ -1,5 +0,0 @@ -go 1.21 - -toolchain go1.21.7 - -use . diff --git a/go.work.sum b/go.work.sum deleted file mode 100644 index 7a24069..0000000 --- a/go.work.sum +++ /dev/null @@ -1,20 +0,0 @@ -github.com/toorop/go-dkim v0.0.0-20201103131630-e1cd1a0a5208 h1:PM5hJF7HVfNWmCjMdEfbuOBNXSVF2cMFGgQTPdKCbwM= -github.com/toorop/go-dkim v0.0.0-20201103131630-e1cd1a0a5208/go.mod h1:BzWtXXrXzZUvMacR0oF/fbDDgUPO8L36tDMmRAf14ns= -github.com/xhit/go-simple-mail/v2 v2.15.0 h1:qMXeqcZErUW/Dw6EXxmPuxHzVI8MdxWnEnu2xcisohU= -github.com/xhit/go-simple-mail/v2 v2.15.0/go.mod h1:b7P5ygho6SYE+VIqpxA6QkYfv4teeyG4MKqB3utRu98= -github.com/yuin/goldmark v1.5.4/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/goldmark v1.5.5 h1:IJznPe8wOzfIKETmMkd06F8nXkmlhaHqFRM9l1hAGsU= -github.com/yuin/goldmark v1.5.5/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= -golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0 h1:SqMFp9UcQJZa+pmYuAKjd9xq1f0j5rLcDIk0mj4qAsA= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/model.go b/model.go index a6cf30a..0f974d5 100644 --- a/model.go +++ b/model.go @@ -213,7 +213,7 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { m.state = editingFrom m.focusActiveInput() m.err = msg - return m, clearErrAfter(5 * time.Second) + return m, clearErrAfter(10 * time.Second) case clearErrMsg: m.err = nil case tea.KeyMsg: