瀏覽代碼

upd: change Message-ID to be more unique

Mikael Koli 3 年之前
父節點
當前提交
3cea4a729d
共有 3 個文件被更改,包括 13 次插入26 次删除
  1. 3 3
      docs/tutorials/testing.rst
  2. 3 6
      redmail/email/sender.py
  3. 7 17
      redmail/test/email/test_headers.py

+ 3 - 3
docs/tutorials/testing.rst

@@ -43,7 +43,7 @@ in tests:
     assert str(msg) == """From: me@example.com
     Subject: Some news
     To: you@example.com
-    Message-ID: <167294165062.31860.1664530310632362057@example.com>
+    Message-ID: <167294165062.31860.1664530310632362057@LAPTOP-1234GML0>
     Date: Dec, 31 Jan 2021 06:56:46 -0000
     Content-Type: text/plain; charset="utf-8"
     Content-Transfer-Encoding: 7bit
@@ -113,7 +113,7 @@ Then to use this mock:
     assert msgs == ["""From: me@example.com
     Subject: Some news
     To: you@example.com
-    Message-ID: <167294165062.31860.1664530310632362057@example.com>
+    Message-ID: <167294165062.31860.1664530310632362057@LAPTOP-1234GML0>
     Date: Dec, 31 Jan 2021 06:56:46 -0000
     Content-Type: text/plain; charset="utf-8"
     Content-Transfer-Encoding: 7bit
@@ -162,7 +162,7 @@ Then to use this class:
     assert msgs == ["""From: me@example.com
     Subject: Some news
     To: you@example.com
-    Message-ID: <167294165062.31860.1664530310632362057@example.com>
+    Message-ID: <167294165062.31860.1664530310632362057@LAPTOP-1234GML0>
     Date: Dec, 31 Jan 2021 06:56:46 -0000
     Content-Type: text/plain; charset="utf-8"
     Content-Transfer-Encoding: 7bit

+ 3 - 6
redmail/email/sender.py

@@ -392,11 +392,8 @@ class EmailSender:
         """Get sender of the email"""
         return sender or self.sender or self.username
 
-    def create_message_id(self, sender:str) -> str:
-        domain = None
-        if sender is not None and '@' in sender:
-            domain = sender.split("@")[1]
-        return make_msgid(domain=domain)
+    def create_message_id(self) -> str:
+        return make_msgid()
 
     def _create_body(self, subject, sender, receivers=None, cc=None, bcc=None) -> EmailMessage:
         msg = EmailMessage()
@@ -414,7 +411,7 @@ class EmailSender:
         # Message-IDs could be produced by the first mail server
         # or the program sending the email (as we are doing now).
         # Apparently Gmail might require it as of 2022
-        msg['Message-ID'] = self.create_message_id(sender)
+        msg['Message-ID'] = self.create_message_id()
 
         msg['Date'] = formatdate()
         return msg

+ 7 - 17
redmail/test/email/test_headers.py

@@ -1,17 +1,12 @@
 import datetime
+import socket
 from textwrap import dedent
 import sys
 import re
 
 from redmail import EmailSender
 
-import pytest
-
-from convert import remove_extra_lines, payloads_to_dict
-from getpass import getpass, getuser
-from platform import node
-
-from convert import remove_email_extra, remove_email_content_id, prune_generated_headers
+from convert import remove_email_content_id, prune_generated_headers
 
 import platform
 PYTHON_VERSION = sys.version_info
@@ -34,23 +29,18 @@ def test_date():
         # It should not take longer than second to generate the email
         assert dt_string in (before.strftime(format), after.strftime(format))
 
-@pytest.mark.parametrize("sender,domain", 
-    [
-        pytest.param("me@example.com", "@example.com", id="With domain"),
-        pytest.param(None, f"@{platform.node()}", id="Without domain"),
-    ]
-)
-def test_message_id(sender, domain):
+def test_message_id():
+    domain = socket.getfqdn()
     email = EmailSender(host=None, port=1234)
-    msg = email.get_message(sender=sender, subject="Some email")
-    msg2 = email.get_message(sender=sender, subject="Some email")
+    msg = email.get_message(sender="me@example.com", subject="Some email")
+    msg2 = email.get_message(sender="me@example.com", subject="Some email")
 
     message_ids = re.findall(r'(?<=Message-ID: ).+', str(msg))
     assert len(message_ids) == 1
     message_id = message_ids[0]
 
     # [0-9]{{12}}[.][0-9]{{5}}[.][0-9]{{20}}
-    assert bool(re.search(fr'<[0-9.]+{domain}>', message_id))
+    assert bool(re.search(fr'<[0-9.]+@{domain}>', message_id))
 
     # Check another email has not the same Message-ID
     message_id_2 = re.findall(r'(?<=Message-ID: ).+', str(msg2))[0]