87 lines
3.0 KiB
Go
87 lines
3.0 KiB
Go
package smtpserver
|
|
|
|
import "testing"
|
|
|
|
// TestEmailLogBodyOmittedByDefault confirms the admin-visible email log gets the
|
|
// message headers but never the body by default — only Subject/headers are diagnostic
|
|
// metadata; the body is content, which shouldn't sit in a log unless explicitly opted
|
|
// into (store_message_content) or the message needed spam review (see
|
|
// TestEmailLogBodyKeptWhenQuarantined).
|
|
func TestEmailLogBodyOmittedByDefault(t *testing.T) {
|
|
backend, _ := newTestBackendWithMailbox(t) // spam_reject_score set sky-high, so nothing quarantines here
|
|
addr := startTestServer(t, backend)
|
|
|
|
if err := sendTestMessage(t, addr, "hello"); err != nil {
|
|
t.Fatalf("send: %v", err)
|
|
}
|
|
|
|
logs, err := backend.DB.ListEmailLogsPage(0, 10)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(logs) != 1 {
|
|
t.Fatalf("expected 1 email log entry, got %d", len(logs))
|
|
}
|
|
if logs[0].MessageBody != "" {
|
|
t.Errorf("expected no body logged by default, got %q", logs[0].MessageBody)
|
|
}
|
|
if logs[0].EmailHeaders == "" {
|
|
t.Error("expected headers to still be logged even with body omitted")
|
|
}
|
|
}
|
|
|
|
// TestEmailLogBodyKeptWhenStoreMessageContentEnabled confirms the sender's own
|
|
// "Store Full Message Content" opt-in (esrv_senders.store_message_content) still works
|
|
// despite the new default-off body logging.
|
|
func TestEmailLogBodyKeptWhenStoreMessageContentEnabled(t *testing.T) {
|
|
backend, _ := newTestBackendWithMailbox(t)
|
|
if _, err := backend.DB.Exec(`UPDATE esrv_senders SET store_message_content = 1 WHERE email = 'test@example.com'`); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
addr := startTestServer(t, backend)
|
|
|
|
if err := sendTestMessage(t, addr, "hello"); err != nil {
|
|
t.Fatalf("send: %v", err)
|
|
}
|
|
|
|
logs, err := backend.DB.ListEmailLogsPage(0, 10)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(logs) != 1 || logs[0].MessageBody == "" {
|
|
t.Fatalf("expected the opted-in sender's message body to be logged, got %+v", logs)
|
|
}
|
|
}
|
|
|
|
// TestEmailLogBodyKeptWhenQuarantined confirms a message quarantined to Spam still
|
|
// gets its body logged even without any opt-in, so an admin can actually review a
|
|
// spam/abuse report — the one deliberate exception to the default-off rule.
|
|
func TestEmailLogBodyKeptWhenQuarantined(t *testing.T) {
|
|
backend, mailboxID := newTestBackendWithMailbox(t)
|
|
rspamd := fakeRspamd(t, 20, "add header")
|
|
backend.Cfg.Section("Rspamd").Key("enabled").SetValue("true")
|
|
backend.Cfg.Section("Rspamd").Key("url").SetValue(rspamd.URL)
|
|
backend.Cfg.Section("Rspamd").Key("reject_score").SetValue("15")
|
|
addr := startTestServer(t, backend)
|
|
|
|
if err := sendTestMessage(t, addr, "hello"); err != nil {
|
|
t.Fatalf("send: %v", err)
|
|
}
|
|
|
|
spamMsgs, err := backend.DB.ListMessagesInFolder(mailboxID, "Spam")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(spamMsgs) != 1 {
|
|
t.Fatalf("expected the message quarantined to Spam, got %d Spam messages", len(spamMsgs))
|
|
}
|
|
|
|
logs, err := backend.DB.ListEmailLogsPage(0, 10)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if len(logs) != 1 || logs[0].MessageBody == "" {
|
|
t.Fatalf("expected the quarantined message's body to be logged for review, got %+v", logs)
|
|
}
|
|
}
|