From a0b44b5adb05e96e68297adcba39985b8f4dee61 Mon Sep 17 00:00:00 2001 From: "R. David Murray" Date: Thu, 2 Dec 2010 21:47:19 +0000 Subject: #8989: add 'domain' keyword to make_msgid. Patch by Adrian von Bidder. --- Doc/library/email.util.rst | 10 ++++++++-- Lib/email/test/test_email.py | 4 ++++ Lib/email/utils.py | 11 +++++++---- Misc/ACKS | 1 + Misc/NEWS | 3 +++ 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/Doc/library/email.util.rst b/Doc/library/email.util.rst index a1ce301..f7b777a 100644 --- a/Doc/library/email.util.rst +++ b/Doc/library/email.util.rst @@ -105,11 +105,17 @@ There are several useful utilities provided in the :mod:`email.utils` module: ``False``. The default is ``False``. -.. function:: make_msgid(idstring=None) +.. function:: make_msgid(idstring=None, domain=None) Returns a string suitable for an :rfc:`2822`\ -compliant :mailheader:`Message-ID` header. Optional *idstring* if given, is a string - used to strengthen the uniqueness of the message id. + used to strengthen the uniqueness of the message id. Optional *domain* if + given provides the portion of the msgid after the '@'. The default is the + local hostname. It is not normally necessary to override this default, but + may be useful certain cases, such as a constructing distributed system that + uses a consistent domain name across multiple hosts. + + .. versionchanged:: 3.2 domain keyword added .. function:: decode_rfc2231(s) diff --git a/Lib/email/test/test_email.py b/Lib/email/test/test_email.py index 5545abe..7993486 100644 --- a/Lib/email/test/test_email.py +++ b/Lib/email/test/test_email.py @@ -2457,6 +2457,10 @@ multipart/report text/rfc822-headers """) + def test_make_msgid_domain(self): + self.assertEqual( + email.utils.make_msgid(domain='testdomain-string')[-19:], + '@testdomain-string>') # Test the iterator/generators diff --git a/Lib/email/utils.py b/Lib/email/utils.py index 5f40bac..ac4da37 100644 --- a/Lib/email/utils.py +++ b/Lib/email/utils.py @@ -148,13 +148,15 @@ def formatdate(timeval=None, localtime=False, usegmt=False): -def make_msgid(idstring=None): +def make_msgid(idstring=None, domain=None): """Returns a string suitable for RFC 2822 compliant Message-ID, e.g: <20020201195627.33539.96671@nightshade.la.mastaler.com> Optional idstring if given is a string used to strengthen the - uniqueness of the message id. + uniqueness of the message id. Optional domain if given provides the + portion of the message id after the '@'. It defaults to the locally + defined hostname. """ timeval = time.time() utcdate = time.strftime('%Y%m%d%H%M%S', time.gmtime(timeval)) @@ -164,8 +166,9 @@ def make_msgid(idstring=None): idstring = '' else: idstring = '.' + idstring - idhost = socket.getfqdn() - msgid = '<%s.%s.%s%s@%s>' % (utcdate, pid, randint, idstring, idhost) + if domain is None: + domain = socket.getfqdn() + msgid = '<%s.%s.%s%s@%s>' % (utcdate, pid, randint, idstring, domain) return msgid diff --git a/Misc/ACKS b/Misc/ACKS index d3ec047..6f1f89a 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -77,6 +77,7 @@ Eric Beser Steven Bethard Stephen Bevan Ron Bickers +Adrian von Bidder David Binger Dominic Binks Philippe Biondi diff --git a/Misc/NEWS b/Misc/NEWS index aeb1f14..8205343 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -53,6 +53,9 @@ Core and Builtins Library ------- +- Issue #8989: email.utils.make_msgid now has a domain parameter that can + override the domain name used in the generated msgid. + - Issue #9299: Add exist_ok parameter to os.makedirs to suppress the 'File exists' exception when a target directory already exists with the specified mode. Patch by Ray Allen. -- cgit v0.12