--- a/ForgeMail/forgemail/lib/util.py
+++ b/ForgeMail/forgemail/lib/util.py
@@ -1,3 +1,4 @@
+import re
import logging
import smtplib
import email.feedparser
@@ -15,6 +16,7 @@
log = logging.getLogger(__name__)
+RE_MESSAGE_ID = re.compile(r'<(.*)>')
COMMON_SUFFIX = tg.config.get('forgemail.domain', '.sourceforge.net')
def parse_address(addr):
@@ -45,11 +47,17 @@
result = {}
result['multipart'] = multipart = msg.is_multipart()
result['headers'] = dict(msg)
+ result['message_id'] = _parse_message_id(msg.get('Message-ID'))
+ result['in_reply_to'] = _parse_message_id(msg.get('In-Reply-To'))
+ result['references'] = _parse_message_id(msg.get('References'))
if multipart:
result['parts'] = []
for part in msg.walk():
dpart = dict(
headers=dict(part),
+ message_id=result['message_id'][0],
+ in_reply_to=result['in_reply_to'],
+ references=result['references'],
content_type=part.get_content_type(),
filename=part.get_filename(None),
payload=part.get_payload(decode=True))
@@ -81,6 +89,11 @@
alt.attach(part)
return msg
+def _parse_message_id(msgid):
+ if msgid is None: return []
+ return [ mo.group(1)
+ for mo in RE_MESSAGE_ID.finditer(msgid) ]
+
class SMTPClient(object):
def __init__(self):
@@ -91,9 +104,9 @@
message['To'] = 'undisclosed-recipients'
message['From'] = addrfrom
message['Subject'] = subject
- message['Message-ID'] = message_id
+ message['Message-ID'] = '<' + message_id + '>'
if in_reply_to:
- message['In-Reply-To'] = in_reply_to
+ message['In-Reply-To'] = '<' + in_reply_to + '>'
content = message.as_string()
try:
self._client.sendmail(addrfrom, addrs, content)