Exim: конвертировать отскочившие сообщения обратно в оригинал

Мы настроили exim4 на Debian в качестве smarthost для отправки почты через почтовые серверы Google. Мы используем Google Apps для всего остального, так что это имело смысл. Проблема в том, что пароль для учетной записи промежуточного узла был изменен, из-за чего exim отослал сообщения назад и затем заморозил их. Теперь у меня есть большая коллекция неотправленных писем в /var/spool/exim4/[input|msglog],

Я попытался запустить:

exim -d -M 1Mx6IS-0006bC-3h

но это приводит к отправке отклоненного сообщения, а не оригинала. Я вижу копию исходного сообщения в /var/spool/exim4/input/1Mx6IS-0006bC-3h-D под линией

------ This is a copy of the message, including all the headers. ------

... но я не нашел способ взять это замороженное отскочившее сообщение и преобразовать его обратно в исходное сообщение, чтобы его можно было повторить.

Есть идеи?

2 ответа

Решение

UNTESTED!

Это скрипт Python, который должен делать то, что вы хотите. Он полностью не протестирован и гарантированно не работает во всех случаях. Если вы не знаете Python, не берите в голову, это была хорошая практика для меня.

import os
import smtplib
import email

mydir = os.open("/mydir")
server = smtplib.SMTP()

files = [mydir + "/" + f for f in os.listdir(mydir) if os.path.isfile(mydir + "/" + f)]

while files:
    f = files.pop()
    msg = email.message_from_file(open(f))
    body = msg.get_payload().split("------ This is a copy of the message, including all the headers. ------")[1].strip()    
    from_addr = msg["To"]
    to_addr = msg["X-Failed-Recipients"]
    print "Sending message to ", to_addr
    server.send(from_addr, to_addr, body)
    print "Message sent"

Это последний скачок? Или тот, который говорит, что другая попытка доставки произойдет через несколько часов, если позже, может ли быть так, что оба сообщения будут отправлены, оригинал и отказов? Поскольку оба стоят в очереди, я так понимаю из твоего вопроса.

Другие вопросы по тегам