Как использовать metamail для извлечения почтовых вложений без интерактивного ввода?

1071
george

Я ищу способ сохранить все вложения из папки IMAP с 3000+ отчетов DMARC, каждый из которых вложен в отдельные сообщения в виде .zipили в .xml.gzфайл. Я использую Claws Mail, у которого есть способ автоматизировать это (см. Примеры -> Сохранить) munpack. К сожалению, в openSUSE Leap 42.3 (который я использую), похоже, нет пакета, который предоставляет munpack. После некоторого поиска в Интернете я нашел альтернативу: metamail -wyпредложил в качестве ответа на этот вопрос .

Попытка этого непосредственно в когтях дала мне некоторую ошибку (как не использование программы должным образом). Поэтому я вручную сохранил одно сообщение во временном каталоге и попытался из консоли:

[/tmp/download]: metamail -yw msg Date: Mon, 03 Nov 2014 10:13:53 +0000 Subject: Report domain: ████████ Submitter: ████████ From: noreply-dmarc-support@google.com To: ████████   This message contains data in an unrecognized format, application/zip, which can either be viewed as text or written to a file.  What do you want to do with the application/zip data? 1 -- See it as text 2 -- Write it to a file 3 -- Just skip it  2 Please enter the name of a file to which the data should be written (Default: ████████.zip) > Wrote file ████████.zip 

Другими словами: это работает само по себе, но требует интерактивного ввода для каждого отдельного сообщения - конечно, не вариант для 3000+ писем.

Мой вопрос:

Как я могу использовать metamailспособ, который не требует интерактивного ввода, чтобы его можно было повторять (например, в скрипте или через функцию Claws Mail)?

1

1 ответ на вопрос

1
dirkt

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

В metamail -q -w -x file_nameпрошлом я успешно использовал сценарии для извлечения вложений. Как вы можете видеть man metamail, он -wговорит metamail не обращаться к файлу mailcap, а просто извлекает вложения, -qговорит, что он тихий, потому что сценарии не любят дополнительный вывод, и -xговорит, что он определенно не работает на терминале, поэтому это не должно задавать глупые вопросы.

У вас уже есть -w, и вы также используете -y, что не нужно, если почта правильно отформатирована, но, возможно, ваша нет - как я уже сказал, я не знаю, какие у вас данные. Страница man также предупреждает о странных эффектах, которые могут произойти -y.

Итак, первая капля -y, посмотрите, все ли еще работает. Затем добавьте -x, посмотрите, перестанет ли он спрашивать. Наконец добавьте, -qчтобы удалить нежелательный вывод.

редактировать

Будучи обвиненным в том, что я слишком ленив, чтобы попытаться, я сделал следующие шаги:

1) отправил мне почтовый файл с одним пустым файлом, используя mutt. Вот полное письмо с некоторыми удаленными / отредактированными заголовками:

From mail Sat Mar 3 12:49:13 2018 Envelope-to: <dirk@...> ... Message-ID: <20180303114913.xr7xvpx2pso6wurn@feanor> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="gsrhzrdopn4ddt7t" Content-Disposition: inline User-Agent: NeoMutt/20170609 (1.8.3) Content-Length: 480 Lines: 18   --gsrhzrdopn4ddt7t Content-Type: text/plain; charset=us-ascii Content-Disposition: inline  Test  --gsrhzrdopn4ddt7t Content-Type: application/zip Content-Disposition: attachment; filename="foo.zip" Content-Transfer-Encoding: base64  UEsDBAoAAAAAALplY0wAAAAAAAAAAAAAAAAHABwAenp6L2Zvb1VUCQAD8IqaWvCKmlp1eAsA AQToAwAABOgDAABQSwECHgMKAAAAAAC6ZWNMAAAAAAAAAAAAAAAABwAYAAAAAAAAAAAApIEA AAAAenp6L2Zvb1VUBQAD8IqaWnV4CwABBOgDAAAE6AMAAFBLBQYAAAAAAQABAE0AAABBAAAA AAA=  --gsrhzrdopn4ddt7t-- 

2) Сохранил его в названном почтовом ящике yyy, затем запустил

METAMAIL_TMPDIR=. metamail -q -x -w ~/Mail/yyy 

3) Как и ожидалось, metamail не запрашивает, а сохраняет все части как два файла с именем 1-M64bZlzи 1-MKfamEn. Второй - это zip-файл, первый - основной текст.

И сейчас? Это работает для меня, это не работает для вас.

Спасибо за быстрый ответ. Я попробовал то, что вы предлагаете, но оно дает мне (я надеюсь, это будет правильно отформатировано): `[/ tmp / download]: metamail -w -x -q msg Это сообщение содержит данные в формате 'application / zip`. который декодируется и записывается в файл с именем "/tmp/████.zip". Если вам не нужны эти данные, вам, вероятно, следует удалить этот файл. Написал файл / tmp / ████.zip`. IOW: это не совсем так и всегда выводит файл в `/ tmp`. Знаете ли вы, как я мог бы направить его, чтобы сохранить файлы в определенном каталоге и, надеюсь, сделать его тихим, чтобы я мог пометить ваш ответ как полный? george 6 лет назад 0
Входной файл `msg` является просто источником почтового сообщения. george 6 лет назад 0
Можете ли вы выбрать один из файлов меньшего размера с этой проблемой, загрузить его куда-нибудь и отредактировать свой вопрос со ссылкой, чтобы я мог посмотреть, если он не содержит конфиденциальных данных? dirkt 6 лет назад 0
Вы можете создать образец файла, отправив себе электронное сообщение с вложением (например, zip), а затем в своем почтовом клиенте выбрав «Просмотр источника» для полученного сообщения. Кстати, я думаю, что нашел правильную команду: `export METAMAIL_TMPDIR = / tmp / download; metamail -w -x -q% F> / tmp / export.log`, где `% F` - имя входного файла. Однако * для некоторых * отчетов DMARC он также создает отдельный текстовый файл с именем, похожим на `mm.EcPvNM`, которое иногда составляет 0 байт, а иногда содержит короткое текстовое сообщение. Есть ли способ оптимизировать команду, чтобы извлечь только вложения? george 6 лет назад 0
ETA: Если вы хотите, пожалуйста, отредактируйте ваш ответ, чтобы он содержал полное решение, чтобы мы могли пометить его для других как «ответ» :) george 6 лет назад 0
Я, конечно, могу создать образец файла, отправив электронное письмо самому себе, но он будет работать с этими файлами, поэтому я не могу выяснить проблему с * вашим файлом * таким образом. :-) И он извлечет * все * части пантомимы, что иногда означает части нулевого размера, если создатель, который его создал, облажался. Другие почтовые программы любят включать короткие текстовые сообщения, что, вероятно, то, что вы видите. Еще одна причина, по которой я хотел бы увидеть одно из * ваших * сообщений. :-) dirkt 6 лет назад 0
Извините, но я не могу публично делиться своими сообщениями. Это внутренние данные. Но я дал шаги для воспроизведения, поскольку это точно тот же принцип. Вы пробовали это? Или вы просто отказываетесь попробовать, потому что у вас нет? :) george 6 лет назад 0
Спасибо за тестирование. И последнее: как мы можем сделать это без сохранения основного текста в отдельном файле, т. Е. Извлечь только вложение? Это возможно, пожалуйста. (ETA: никто не обвиняет тебя ни в чем) george 6 лет назад 0
Ты не можешь Он извлечет * все * части MIME, и, в зависимости от создаваемого почтовика, может быть * много * частей MIME. Вы можете проанализировать вывод `metamail` с помощью` grep -B2 application / zip` или аналогичного, чтобы получить имя * всех * частей mime с этим типом содержимого. Или вы можете использовать `file` для определения типа извлеченных файлов. Или что-нибудь еще, что работает для вас. dirkt 6 лет назад 1

Похожие вопросы