From 5874911c91f8c8d79238df2917005f4546321d6e Mon Sep 17 00:00:00 2001 From: Winni Neessen Date: Mon, 7 Oct 2024 15:04:04 +0200 Subject: [PATCH] Simplify Message-ID generation Updated the SetMessageID method to generate a "Message-ID" using a single randomly generated string combined with the hostname, replacing the prior complex format that included process ID and multiple random numbers. This change simplifies the code of the generated IDs. --- msg.go | 18 +++++++----------- msg_test.go | 2 +- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/msg.go b/msg.go index fc0bb57..61feda1 100644 --- a/msg.go +++ b/msg.go @@ -972,12 +972,12 @@ func (m *Msg) Subject(subj string) { // SetMessageID generates and sets a unique "Message-ID" header for the Msg. // -// This method creates a "Message-ID" string using the current process ID, random numbers, and the hostname -// of the machine. The generated ID helps uniquely identify the message in email systems, facilitating tracking -// and preventing duplication. If the hostname cannot be retrieved, it defaults to "localhost.localdomain". +// This method creates a "Message-ID" string using a randomly generated string and the hostname of the machine. +// The generated ID helps uniquely identify the message in email systems, facilitating tracking and preventing +// duplication. If the hostname cannot be retrieved, it defaults to "localhost.localdomain". // // The generated Message-ID follows the format -// "". +// "". // // References: // - https://datatracker.ietf.org/doc/html/rfc5322#section-3.6.4 @@ -986,13 +986,9 @@ func (m *Msg) SetMessageID() { if err != nil { hostname = "localhost.localdomain" } - randNumPrimary := randNum(100000000) - randNumSecondary := randNum(10000) - randString, _ := randomStringSecure(17) - procID := os.Getpid() * randNumSecondary - messageID := fmt.Sprintf("%d.%d%d.%s@%s", procID, randNumPrimary, randNumSecondary, - randString, hostname) - m.SetMessageIDWithValue(messageID) + // We have 64 possible characters, which for a 22 character string, provides approx. 132 bits of entropy. + randString, _ := randomStringSecure(22) + m.SetMessageIDWithValue(fmt.Sprintf("%s@%s", randString, hostname)) } // GetMessageID retrieves the "Message-ID" header from the Msg. diff --git a/msg_test.go b/msg_test.go index f570b02..7fcbd99 100644 --- a/msg_test.go +++ b/msg_test.go @@ -786,8 +786,8 @@ func TestMsg_SetMessageIDWithValue(t *testing.T) { // TestMsg_SetMessageIDRandomness tests the randomness of Msg.SetMessageID methods func TestMsg_SetMessageIDRandomness(t *testing.T) { var mids []string + m := NewMsg() for i := 0; i < 50_000; i++ { - m := NewMsg() m.SetMessageID() mid := m.GetMessageID() mids = append(mids, mid)