LINUX.ORG.RU
Форум — Talks  

Кто-нибудь пользуется электронной почтой через curl?

 , ,


0

1

Я электронной почтой пользуюсь крайне редко, и 99% моих использований почты это получение одноразовых кодов и ссылок. Поэтому держать почтовый клиент на своём компьютере для меня смысла ровно 0.

При использовании почтовых сервисов, у них всегда есть веб-интерфейс, поэтому, в принципе, этого хватает.

Сейчас подумываю таки заселфхостить свою почту. Веб-интерфейс разворачивать не хочу, это слишком много.

Если бы почту слали текстом, мне бы, честно говоря, хватило telnet (ну или openssl s_client). Я как-то пробовал IMAP команды таким макаром вбивать, никаких проблем, всё понятно и user-friendly. Но HTML-письма читать невозможно, там адский суп из тегов. Но ИИшника подсказала мне интересный вариант - оказывается curl умеет в IMAP, т.е. можно посмотреть список писем и скачать письмо в .eml формате.

Остаётся только преобразовать .eml в .html (там есть нюансы с вложенными файлами). Готовых инструментов я не нашёл, но в целом ладно, разобраться с этим можно.

Кто-нибудь таким пользуется? Какой у вас workflow?

★★★★★

заселфхостить

Запускай какой-нибудь из консольных mail-клиентов по ssh и кури выхлоп.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)

Добровольно отрезать себе пальцы и искать способы поковырять в носу.

futurama ★★★★★
()

Напиши скрипт на питоне - он всё умеет. Будет и забирать, и показывать как хочешь.

skyman ★★★★★
()

поставить какойнить минимальный интерактивный клиент.
вариант бэ. скрипт качающий новую почту и выдающий ее в виде текстового лога пришедших сообщений.

pfg ★★★★★
()
Последнее исправление: pfg (всего исправлений: 1)

Проверку почты элементарно заскриптовать на любом скриптовом языке и там же вставить парсилку html (перл, пистон, etc). Проблем вообще нет.

vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 1)
Ответ на: комментарий от seiken

Ну я пытаюсь понять, что нужно сделать. Очевидно, что работу с почтовым сервером программировать смысла нет. Это уже есть в curl. Пока всё упирается в преобразование eml в html. Причём там надо переписывать HTML и реализовывать всякие прикольные штуки, вроде отключения загрузки картинок и прочего из внешних источников; отображение заттаченных картинок; декодирование вложенных файлов. В целом ничего сверхъестественного, но на пару лет работы будет.

vbr ★★★★★
() автор топика
Ответ на: комментарий от pfg

Зачем мне это? Для отображения html у меня есть браузер. А готового html у меня нет. У меня есть eml.

vbr ★★★★★
() автор топика
Ответ на: комментарий от vbr

Email::MIME или MIME::Parser не подойдет? Не думаю что набросать остнастку на перле на основе имеющихся парсеров займет два года.

kilolife ★★★★★
()
Ответ на: комментарий от kilolife

Если я буду писать, то на С без библиотек. Мне кажется, что парсинг HTML это нетривиальная задача. Впрочем могу ошибаться, никогда не пробовал…

vbr ★★★★★
() автор топика
Ответ на: комментарий от vbr

Ну как бы все придумали до нас в этом плане. А вот на C без библиотек - действительно нетривиальная задача.
Опять же кто мешает подглядеть как сделали другие да и переписать на с.
У mojolicious есть очень удобные инструменты для разбора HTML/XML https://docs.mojolicious.org/Mojo/DOM

kilolife ★★★★★
()

А чем консольные почтовые клиенты не угодили?

bbc69
()
Ответ на: комментарий от vbr

В целом ничего сверхъестественного, но на пару лет работы будет.

ЛЛМ. Изучаешь сначала я как именно мусор добавляется в хтмл (какие теги, может, что-то нетривиальное) и просто говоришь ЛЛМке: вырезай в данном скрипте весь мусор из хтмл, этот и тот.

seiken ★★★★★
()
Ответ на: комментарий от seiken

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

vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 1)

А чем, собственно, fetchmail не устраивает? Он ведь примерно для этого и сделан:

collect mail using any variant of POP or IMAP and forwards to a the local SMTP (via TCP socket) or LMTP (via TCP or Unix socket) listener or into an MDA program

CanisDirusLeidy
()
Ответ на: комментарий от CanisDirusLeidy

У меня нет локального SMTP сервера или MDA программы. Не совсем понимаю, при чём тут fetchmail вообще.

vbr ★★★★★
() автор топика
Ответ на: комментарий от vtVitus

На перле сделал за час-два.

а чё так долго?

seiken ★★★★★
()
Ответ на: комментарий от vbr

У меня нет локального SMTP сервера или MDA программы.

А если найду? Ой не факт. Во первых, он там вполне может стоять «по умолчанию», чтобы сообщения от всяких cron в /var/mail складывать. Во вторых, если с того хоста отправлять почту не требуется, то достаточно даже не полноценного MTA, уровня postfix/exim, а какого-нибудь procmail, скачанное fetchmail по директориям раскладывать: https://wiki.archlinux.org/title/Courier-Imap_with_SSL_and_fetchmail

CanisDirusLeidy
()

Непонятно чего ты хочешь добиться. «Селфхост почты» это запускание на своём компе SMTP-сервера, принимающего письма. Причём тут IMAP непонятно, IMAP-клиент (если он есть) и так и так всегда будет на твоём компе.

Но если SMTP-сервер твой собственный то реализовывать IMAP и подобное ненужно, файлы почты и так либо складываются на твоём компе, либо на сервере куда ты можешь зайти по ssh и забрать их копированием файлов.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от vbr

Если ты собираешься смотреть html то скорее всего то что ты сделаешь в итоге окажется веб-интерфейсом к почте. Т.к. код для показывания содержимого входящих списком явно проще кода, отвечающего за конвертацию сырого html в неопасный вид без порчи его читаемости.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)

Сейчас подумываю таки заселфхостить свою почту. Веб-интерфейс разворачивать не хочу, это слишком много.

Почему? Какой-нибудь Roundcube много не требует. Всяко более «легкая» штука, чем веб-браузер, который присутствует в твоей схеме.

Если я буду писать, то на С без библиотек. Мне кажется, что парсинг HTML это нетривиальная задача. Впрочем могу ошибаться, никогда не пробовал…

Хм, ну тогда возьми PHP-функции из Roundcube и перепиши на С без библиотек.

MirandaUser2 ★★
()
Ответ на: комментарий от vbr

Использовать готовые eml2html тулзы религия позволяет или нет? Есть на питоне, на гошке, на пыхе. Правда на чистом С вроде как нет. Ну и вроде там извлечь довольно легко html часть, тупо по стартовому\финальному тэгу вырезать. Наверное даже sed'ом можно.

Пока гуглил, нашел вот что

https://github.com/inflex/ripMIME

Распаковывает eml в каталог. И даже написана на чистом C.

Loki13 ★★★★★
()
Ответ на: комментарий от Loki13

Спасибо, меня в целом интересовал личный опыт.

Про реализацию. Там не совсем всё просто. Пропарсить MIME и вытащить файлы - это да, это относительно тривиально. Но, например, HTML-файл может ссылаться на аттачменты, что-то вроде <img src="cid:logo123"> и нужно это заменить например на data-url, вставляя аттачмент в результирующий HTML (ну или ещё как, не суть). Т.е. на этом этапе уже нужен парсинг HTML, если мы не хотим менять что попало. А раз парсим HTML, то хочется сразу добавить фичу, которая есть в любом мейл-клиенте, которая отключает загрузку внешних ресурсов, пока не нажмёшь кнопку, т.е. нужно ещё переписать некоторые теги и заинъектить небольшой JavaScript. Ну это то, что мне сразу в голову пришло при обдумывании этой идеи. Может ещё что можно.

vbr ★★★★★
() автор топика
Ответ на: комментарий от MirandaUser2

Почему? Какой-нибудь Roundcube много не требует.

Ничего себе не требует. Веб-сервер, PHP-движок, mysql. С веб-сервером я ещё готов смириться, а всё остальное это точно перебор.

Всяко более «легкая» штука, чем веб-браузер, который присутствует в твоей схеме.

Веб-браузер в моей схеме присутствует вне зависимости от всего остального, я через него на лор хожу.

vbr ★★★★★
() автор топика
Ответ на: комментарий от vbr

А готового html у меня нет. У меня есть eml.

Для C есть libgmime. Я использовал её для извлечения вложений, но она в целом хорошо подходит для разбора eml на части.

С переписыванием HTML не подскажу. Теоретически, можно было бы взять libxml2, но она умеет работать с HTML лишь весьма условно.

Rootlexx ★★★★★
()

Не страдай фигней - поставь mailcow и не мучайся

Norgat ★★★★★
()
Ответ на: комментарий от vbr

Веб-браузер в моей схеме присутствует вне зависимости от всего остального, я через него на лор хожу.

Так надо и на лор тоже через curl ходить. А то как-то скучно.

bread ☆
()
Последнее исправление: bread (всего исправлений: 1)
Ответ на: комментарий от vbr

Веб-браузеры более-менее поддерживают MHTML (RFC 2557) формат. Google Chrome в т.ч. content-id (cid) urls.

которая отключает загрузку внешних ресурсов, пока не нажмёшь кнопку,

так это, может просто в offline режиме браузер запускать?
Т.е. задачу можно решать с другой стороны: не HTML анализировать на предмет нежелательных конструкций, а проинструктировать веб-браузер их не выполнять.

MirandaUser2 ★★
()

пользовался emacs+wanderlust в том числе и по ssh прямо на почтосервере, он умеет html и в текстовом режиме более менее показывать

можно offlineimap и смотреть файлики чем хочешь

uudeview аттачи из писем вытаскивает

ещё был какой-то eml viewer, но он на перле и гтк2, уже был заброшен и я забыл название

sergej ★★★★★
()

Веб-интерфейс разворачивать не хочу, это слишком много

ну roundcube и веб сервер с пхп не такие уж и сложные/толстые

Я до такой степени со своей почтой не извращаюсь, но когда надо в скриптах получаю html из писем perl+MIME::Parser. Там буквально найти if ($entity->mime_type eq 'text/html') и сохранить $entity->bodyhandle. HTML::TreeBuilder и HTML::FormatText если надо получить текст из html

sergej ★★★★★
()
Ответ на: комментарий от MirandaUser2

Веб-браузеры более-менее поддерживают MHTML (RFC 2557) формат. Google Chrome в т.ч. content-id (cid) urls.

Да, на MHTML уже тоже вышел, спасибо за наводку. Там проблема в том, что в MHTML загрузка внешних ресурсов вообще отключена. Не уверен, что это идеально, хотя может так и лучше даже. С точки зрения преобразования eml в mhtml задача сильно упрощается, там, похоже, HTML парсить не придётся.

vbr ★★★★★
() автор топика
Последнее исправление: vbr (всего исправлений: 1)

Какой у вас workflow?

Thunderbird

bvn13 ★★★★★
()
Вы не можете добавлять комментарии в эту тему: только для зарегистрированных, score>=50.