diff --git a/msg.go b/msg.go index 0efd043..53bfdbf 100644 --- a/msg.go +++ b/msg.go @@ -117,6 +117,9 @@ type Msg struct { // sendError holds the SendError in case a Msg could not be delivered during the Client.Send operation sendError error + + // noDefaultUserAgent indicates whether the default User Agent will be excluded for the Msg when it's sent. + noDefaultUserAgent bool } // SendmailPath is the default system path to the sendmail binary @@ -192,6 +195,13 @@ func WithPGPType(t PGPType) MsgOption { } } +// WithNoDefaultUserAgent configures the Msg to not use the default User Agent +func WithNoDefaultUserAgent() MsgOption { + return func(m *Msg) { + m.noDefaultUserAgent = true + } +} + // SetCharset sets the encoding charset of the Msg func (m *Msg) SetCharset(c Charset) { m.charset = c @@ -1166,6 +1176,9 @@ func (m *Msg) setEncoder() { // checkUserAgent checks if a useragent/x-mailer is set and if not will set a default // version string func (m *Msg) checkUserAgent() { + if m.noDefaultUserAgent { + return + } _, uaok := m.genHeader[HeaderUserAgent] _, xmok := m.genHeader[HeaderXMailer] if !uaok && !xmok { diff --git a/msg_test.go b/msg_test.go index e8aa66d..a84967d 100644 --- a/msg_test.go +++ b/msg_test.go @@ -3161,3 +3161,53 @@ func TestMsg_BccFromString(t *testing.T) { }) } } + +// TestMsg_checkUserAgent tests the checkUserAgent method of the Msg +func TestMsg_checkUserAgent(t *testing.T) { + tests := []struct { + name string + noDefaultUserAgent bool + genHeader map[Header][]string + wantUserAgent string + sf bool + }{ + { + name: "check default user agent", + noDefaultUserAgent: false, + wantUserAgent: "go-mail v0.4.1 // https://github.com/wneessen/go-mail", + sf: false, + }, + { + name: "check no default user agent", + noDefaultUserAgent: true, + wantUserAgent: "", + sf: true, + }, + { + name: "check if ua and xm is already set", + noDefaultUserAgent: false, + genHeader: map[Header][]string{ + HeaderUserAgent: {"custom UA"}, + HeaderXMailer: {"custom XM"}, + }, + wantUserAgent: "custom UA", + sf: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + msg := &Msg{ + noDefaultUserAgent: tt.noDefaultUserAgent, + genHeader: tt.genHeader, + } + msg.checkUserAgent() + gotUserAgent := "" + if val, ok := msg.genHeader[HeaderUserAgent]; ok { + gotUserAgent = val[0] // Assuming the first one is the needed value + } + if gotUserAgent != tt.wantUserAgent && !tt.sf { + t.Errorf("UserAgent got = %v, want = %v", gotUserAgent, tt.wantUserAgent) + } + }) + } +}