From 9569e66ccb6f4754b5e41ad8b7c04ad76edb3d88 Mon Sep 17 00:00:00 2001 From: emersion Date: Tue, 12 Dec 2017 13:46:22 +0100 Subject: [PATCH] smtp: fix sending message to plaintext and encrypted recipients --- cmd/hydroxide/hydroxide.go | 1 + protonmail/protonmail.go | 7 +++++-- smtp/smtp.go | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/cmd/hydroxide/hydroxide.go b/cmd/hydroxide/hydroxide.go index af2d2ac..931a678 100644 --- a/cmd/hydroxide/hydroxide.go +++ b/cmd/hydroxide/hydroxide.go @@ -145,6 +145,7 @@ func main() { s.Addr = "127.0.0.1:" + port s.Domain = "localhost" // TODO: make this configurable s.AllowInsecureAuth = true // TODO: remove this + //s.Debug = os.Stdout log.Println("Starting SMTP server at", s.Addr) log.Fatal(s.ListenAndServe()) diff --git a/protonmail/protonmail.go b/protonmail/protonmail.go index a5a723f..2e17e7c 100644 --- a/protonmail/protonmail.go +++ b/protonmail/protonmail.go @@ -4,6 +4,7 @@ package protonmail import ( "bytes" "encoding/json" + "fmt" "io" "io/ioutil" "net/http" @@ -23,7 +24,8 @@ type resp struct { func (r *resp) Err() error { if err := r.apiError; err != nil { - return r.apiError + err.code = r.Code + return err } return nil } @@ -33,11 +35,12 @@ type maybeError interface { } type apiError struct { + code int // populated by resp Message string `json:"Error"` } func (err apiError) Error() string { - return err.Message + return fmt.Sprintf("[%v] %v", err.code, err.Message) } // Client is a ProtonMail API client. diff --git a/smtp/smtp.go b/smtp/smtp.go index af6a8e2..2db0eac 100644 --- a/smtp/smtp.go +++ b/smtp/smtp.go @@ -237,7 +237,7 @@ func (u *user) Send(from string, to []string, r io.Reader) error { if len(resp.Keys) == 0 { plaintextRecipients = append(plaintextRecipients, rcpt.Address) - break + continue } // TODO: only keys with Send == 1