Блог‎ > ‎

Как извлечь нужное письмо, когда почтовый сервер напрямую недоступен

Отправлено 17 мар. 2014 г., 03:47 пользователем Константин Ханкин
Итак, ситуация: вам срочно (прямвотщазиникакпозже) понадобилось вложение от одного из писем в вашем почтовом ящике. Маленькое допущение: вы - администратор почтовой системы :) Проблема в том, что почтовый сервер труднодоступен. Настраивать почтовый клиент нельзя, веб-интерфейса нет.

Вообще, этот пост показывает пользу веб-интерфейса: если вдруг по каким-то причинам почта нужна, а почтовый клиент настраивать нельзя, он спасает.

В моём случае ситуация была достаточно простой - я мог получить доступ к почте с телефона. Пытливый читатель тут же спросит: а в чём тогда проблема-то? Сохраняем файл из почтового клиента на флешку, подключаем USB-кабель и нет проблем! А есть проблема. И называется она ограничением на количество одновременных подключений от одного пользователя с одного адреса.

На андроиде я использую K-9 Mail. Он почему-то для каждого IMAP-каталога пытается открыть отдельное соединение. Тут-то и проявляет себя ограничение, не давая организовать ещё одно подключение для сохранения файла (вложения в телефоне не хранятся). Встроенный почтовый клиент общего назначения (то есть не Gmail) мне не понравился, ибо даже не умеет перемещать письма из одного каталога в другой и работать со спамом. Убогий, в общем.

Итак, промежуточный итог:
  • Нужно вложение
  • С телефона его извлечь нельзя, ибо лимит подключений исчерпан
  • С рядом стоящего компьютера его получить нельзя, потому что почтовый клиент настраивать нельзя (или его нет, неважно)
На первый взгляд, полная пичалька (хотя во многом ССЗБ :) ). Но! Тут мы вспоминаем допущение. А у администратора всегда есть универсальный инструмент для всего. Имя ему SSH. С его помощью требуемое вложение было получено следующим образом:
  1. SSH до шлюза, за которым стоит почтовый сервер (да, он стоит во внутренней сети. Плохо, но пока так).
  2. SSH со шлюза до почтового сервера.
  3. На почтовом сервере идём в /var/mail/<login>.
  4. В моём случае почта хранится в maildir'ах. Соответственно, письма раскиданы по куче подкаталогов и хранятся в файлах с названиями, ничего не говорящими обывателю. Ищем нужное письмо по дате создания файла либо полнотекстовым поиском (сиречь грепом) по отправителю. Искать по теме письма не стоит: могут возникнуть нелады с кодировками.
  5. При попытке отправить это письмо как вложение с помощью cat <file> | mail ...@gmail.com меня ждала неудача. На телефоне письмо из вложения открыть я не смог, на компьютере не стал пытаться. Поэтому вспоминаем, что у нас есть ещё и веб-сервер comp.susu.ac.ru, и копируем письмо туда с помощью scp.
  6. Не тут-то было! В имени файла содержатся точки и (внимание!) имя домена, которое scp воспринимает как адрес узла, с которого надо получить файл. Решается легко - переименованием КОПИИ письма. Теперь с помощью scp наконец-то копируем его на веб-сервер.
  7. Ну а тут уже всё просто: получаем скопированный файл браузером, дивимся на местами пропавшие символы (из-за кодировке), сохраняем вложение. Цель достигнута, ура.
В качестве заключения:
  1. Делаете почту - сделайте вебмейл. Вам несложно, а пользователям удобно.
  2. Когда хочется родить какое-нибудь интересное решение - поставьте себе как можно больше ограничений. Решение получится очень далёким от человеческого, но зато вы разомнёте мозг, а ведь в конечном итоге не ради ли этого крутится мир? :)
Comments