Skip to content

Commit

Permalink
Merge pull request #178 from gegorov2030/no-default-user-agent
Browse files Browse the repository at this point in the history
Add an option to skip adding a User-Agent
  • Loading branch information
wneessen authored Feb 26, 2024
2 parents 68e6284 + 299490f commit 5c143cb
Show file tree
Hide file tree
Showing 2 changed files with 63 additions and 0 deletions.
13 changes: 13 additions & 0 deletions msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand Down
50 changes: 50 additions & 0 deletions msg_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
})
}
}

0 comments on commit 5c143cb

Please sign in to comment.