Skip to content

Commit 5abb2f4

Browse files
committed
update
1 parent 23edf51 commit 5abb2f4

3 files changed

Lines changed: 58 additions & 34 deletions

File tree

Mailman/Queue/IncomingRunner.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -151,17 +151,7 @@ def __init__(self, slice=None, numslices=1):
151151

152152
def _convert_message(self, msg):
153153
"""Convert email.message.Message to Mailman.Message with proper handling of nested messages."""
154-
if isinstance(msg, EmailMessage):
155-
mailman_msg = Mailman.Message.Message()
156-
for key, value in msg.items():
157-
mailman_msg[key] = value
158-
if msg.is_multipart():
159-
for part in msg.get_payload():
160-
mailman_msg.attach(self._convert_message(part))
161-
else:
162-
mailman_msg.set_payload(msg.get_payload())
163-
return mailman_msg
164-
return msg
154+
return Runner._convert_message(self, msg)
165155

166156
def _dispose(self, mlist, msg, msgdata):
167157
"""Process an incoming message."""

Mailman/Queue/OutgoingRunner.py

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -204,17 +204,7 @@ def _retry_with_new_connection(self, mlist, msg, msgdata):
204204

205205
def _convert_message(self, msg):
206206
"""Convert email.message.Message to Mailman.Message with proper handling of nested messages."""
207-
if isinstance(msg, email.message.Message):
208-
mailman_msg = Message()
209-
for key, value in msg.items():
210-
mailman_msg[key] = value
211-
if msg.is_multipart():
212-
for part in msg.get_payload():
213-
mailman_msg.attach(self._convert_message(part))
214-
else:
215-
mailman_msg.set_payload(msg.get_payload())
216-
return mailman_msg
217-
return msg
207+
return Runner._convert_message(self, msg)
218208

219209
def _validate_message(self, msg, msgdata):
220210
"""Validate the message for outgoing delivery.

Mailman/Queue/Runner.py

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,29 @@ def _oneloop(self):
231231

232232
return filecnt
233233

234+
def _convert_message(self, msg):
235+
"""Convert email.message.Message to Mailman.Message with proper handling of nested messages.
236+
237+
Args:
238+
msg: The message to convert
239+
240+
Returns:
241+
Mailman.Message: The converted message
242+
"""
243+
if isinstance(msg, email.message.Message):
244+
mailman_msg = Message.Message()
245+
# Copy all attributes from the original message
246+
for key, value in msg.items():
247+
mailman_msg[key] = value
248+
# Copy the payload
249+
if msg.is_multipart():
250+
for part in msg.get_payload():
251+
mailman_msg.attach(self._convert_message(part))
252+
else:
253+
mailman_msg.set_payload(msg.get_payload())
254+
return mailman_msg
255+
return msg
256+
234257
def _validate_message(self, msg, msgdata):
235258
"""Validate and convert message if needed.
236259
@@ -242,17 +265,7 @@ def _validate_message(self, msg, msgdata):
242265
# Convert message if needed
243266
if not isinstance(msg, Message.Message):
244267
syslog('debug', 'Runner._validate_message: Converting message %s to Mailman.Message', msgid)
245-
mailman_msg = Message.Message()
246-
# Copy all attributes from the original message
247-
for key, value in msg.items():
248-
mailman_msg[key] = value
249-
# Copy the payload
250-
if msg.is_multipart():
251-
for part in msg.get_payload():
252-
mailman_msg.attach(part)
253-
else:
254-
mailman_msg.set_payload(msg.get_payload())
255-
msg = mailman_msg
268+
msg = self._convert_message(msg)
256269

257270
# Validate required Mailman.Message methods
258271
required_methods = ['get_sender', 'get', 'items', 'is_multipart', 'get_payload']
@@ -306,7 +319,38 @@ def _onefile(self, msg, msgdata):
306319
self._shunt.enqueue(msg, msgdata)
307320
return
308321

309-
sender = msg.get_sender()
322+
# Convert to Mailman.Message if needed
323+
if not isinstance(msg, Message.Message):
324+
try:
325+
mailman_msg = Message.Message()
326+
# Copy all attributes from the original message
327+
for key, value in msg.items():
328+
mailman_msg[key] = value
329+
# Copy the payload
330+
if msg.is_multipart():
331+
for part in msg.get_payload():
332+
mailman_msg.attach(part)
333+
else:
334+
mailman_msg.set_payload(msg.get_payload())
335+
msg = mailman_msg
336+
syslog('debug', 'Converted message to Mailman.Message instance')
337+
except Exception as e:
338+
syslog('error', 'Failed to convert message to Mailman.Message: %s', str(e))
339+
self._shunt.enqueue(msg, msgdata)
340+
return
341+
342+
# Get sender using Mailman.Message's get_sender method
343+
try:
344+
sender = msg.get_sender()
345+
if not sender:
346+
syslog('error', 'Could not determine sender for message %s', msgid)
347+
self._shunt.enqueue(msg, msgdata)
348+
return
349+
except Exception as e:
350+
syslog('error', 'Error getting sender: %s', str(e))
351+
self._shunt.enqueue(msg, msgdata)
352+
return
353+
310354
listname = msgdata.get('listname', mm_cfg.MAILMAN_SITE_LIST)
311355
mlist = self._open_list(listname)
312356
if not mlist:

0 commit comments

Comments
 (0)