diff --git a/internal/user/smtp.go b/internal/user/smtp.go index 67682f37..b27f6d34 100644 --- a/internal/user/smtp.go +++ b/internal/user/smtp.go @@ -66,6 +66,9 @@ func (user *User) sendMail(authID string, from string, to []string, r io.Reader) return fmt.Errorf("failed to read message: %w", err) } + // If running a QA build, dump to disk. + debugDumpToDisk(b) + // Compute the hash of the message (to match it against SMTP messages). hash, err := getMessageHash(b) if err != nil { diff --git a/internal/user/smtp_debug.go b/internal/user/smtp_debug.go new file mode 100644 index 00000000..b9a4e25c --- /dev/null +++ b/internal/user/smtp_debug.go @@ -0,0 +1,35 @@ +// Copyright (c) 2022 Proton AG +// +// This file is part of Proton Mail Bridge. +// +// Proton Mail Bridge is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Proton Mail Bridge is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Proton Mail Bridge. If not, see . + +//go:build build_qa + +package user + +import ( + "os" + "time" +) + +func debugDumpToDisk(b []byte) { + if os.Getenv("BRIDGE_SMTP_DEBUG") == "" { + return + } + + if err := os.WriteFile(time.Now().Format(time.RFC3339Nano)+"_smtp_debug.eml", b, 0600); err != nil { + panic(err) + } +} diff --git a/internal/user/smtp_default.go b/internal/user/smtp_default.go new file mode 100644 index 00000000..c5d67c43 --- /dev/null +++ b/internal/user/smtp_default.go @@ -0,0 +1,22 @@ +// Copyright (c) 2022 Proton AG +// +// This file is part of Proton Mail Bridge. +// +// Proton Mail Bridge is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// Proton Mail Bridge is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with Proton Mail Bridge. If not, see . + +//go:build !build_qa + +package user + +func debugDumpToDisk(b []byte) {}