Назад | Перейти на главную страницу

Exim: конвертировать возвращенные сообщения обратно в исходные

Мы настроили exim4 на Debian как интеллектуальный хост для отправки почты через почтовые серверы 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. ------

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

Любые идеи?

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

НЕПРОВЕРЕНО!

Это скрипт на 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"