diff options
author | Drew DeVault <sir@cmpwn.com> | 2019-05-16 12:15:34 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2019-05-16 12:15:34 -0400 |
commit | 475b697bdfd7a5821282174f14f8d904e47aff4d (patch) | |
tree | 7febf2e25cede5809f1d40c934d379315e06bd64 /lib | |
parent | 2b3e123cb86f9b4c5853e31d9e76c2b0d083f90a (diff) |
Implement (basic form) of :reply
Diffstat (limited to 'lib')
-rw-r--r-- | lib/msgid.go | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/msgid.go b/lib/msgid.go new file mode 100644 index 0000000..8282d1d --- /dev/null +++ b/lib/msgid.go @@ -0,0 +1,34 @@ +package lib + +// TODO: Remove this pending merge into github.com/emersion/go-message + +import ( + "bytes" + "encoding/binary" + "fmt" + "math/rand" + "os" + "time" + + "github.com/martinlindhe/base36" +) + +// Generates an RFC 2822-complaint Message-Id based on the informational draft +// "Recommendations for generating Message IDs", for lack of a better +// authoritative source. +func GenerateMessageId() string { + var ( + now bytes.Buffer + nonce bytes.Buffer + ) + binary.Write(&now, binary.BigEndian, time.Now().UnixNano()) + binary.Write(&nonce, binary.BigEndian, rand.Uint64()) + hostname, err := os.Hostname() + if err != nil { + hostname = "localhost" + } + return fmt.Sprintf("<%s.%s@%s>", + base36.EncodeBytes(now.Bytes()), + base36.EncodeBytes(nonce.Bytes()), + hostname) +} |