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"
Это последний скачок? Или тот, который говорит, что другая попытка доставки произойдет через несколько часов, если позже, может ли быть так, что оба сообщения будут отправлены, оригинал и отказов? Поскольку оба стоят в очереди, я так понимаю из твоего вопроса.