Как получить HTML из электронной почты с Linux?

454
William Tang

Я использую Linux-машину (Debian) и установил на нее fetchmail и procmail. Прямо сейчас он может получать письма, отправленные на мой адрес электронной почты каждую минуту. Однако файл, извлекаемый fetchmail, не является обычным html-файлом, но содержит символы для печати в кавычках.

Моя цель - получить исходный HTML-код письма, как если бы я открыл Outlook в Windows, щелкнул правой кнопкой мыши по почте и выбрал «Показать исходный код».

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

Изменить: мой первоначальный вопрос не хватает точности, поэтому здесь больше информации о моей проблеме. Один из моих клиентов каждый день отправляет мне электронное письмо, содержащее таблицу с данными о продажах за предыдущий рабочий день. Прямо сейчас, каждый день, я должен копировать, вставлять данные из электронной почты в файл EXCEL. Однако, поскольку это очень повторяющаяся задача, я хочу найти решение, которое может сделать это для меня автоматически. Я знаю, как записывать данные в EXCEL-файл с помощью Python, и у меня есть представление о том, как извлечь информацию из HTML-документа с помощью некоторых библиотек Python.

Поэтому я решил использовать crontab с Linux, fetchmail и procmail, чтобы сделать следующее: каждую минуту я проверяю свой почтовый ящик, получил ли я письмо от своего клиента. Если это так, я запускаю скрипт Python для этого файла, чтобы получить информацию. После этого я ввожу эту информацию в файл EXCEL и отправляю ее себе.

Сценарий отлично работает на моем ПК с исходным кодом HTML-сообщения электронной почты, полученного из Outlook. Однако на моей машине с Linux это не работает. Я открыл исходный код файла электронной почты со своего компьютера с Linux и обнаружил, что часть HTML-кода была изменена.

0
Если gmail не делает что-то смешное, файл, который вы получили через `fetchmail`, должен быть в формате MIME, состоящем из нескольких частей (то, что он содержит« символы для печати в кавычках », это не главное). Многие почтовые ** клиенты ** отправляют электронную почту как в текстовом, так и в HTML-формате, как разные части MIME, но нет никакой гарантии, что письмо, адресованное вам, вообще содержит HTML (если, например, gmail не добавляет его, если оно отсутствует). Вы можете использовать `metamail` для извлечения различных частей, включая HTML. dirkt 5 лет назад 1
Команда Outlook «Показать исходный код» делает очень глупые вещи; Вы действительно не хотите этого. tripleee 5 лет назад 0

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

0
tripleee

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

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

:0B: * Content-type: text/html * Content-transfer-encoding: quoted-printable | quoted-printable --decode >>extracted.html 

будет декодировать QP и добавлять к растущему файлу полезных нагрузок HTML (при условии, что у вас есть команда, названная quoted-printableс опцией--decode декодирования QP).

Это, вероятно, бесполезно, поскольку большинство полезных нагрузок HTML находятся в многокомпонентных контейнерах MIME. Выше предполагается, что сообщение имеет одну полезную нагрузку верхнего уровня, котораяtext/html закодирована и кавычки для печати, и просто не будет работать, если это не так.

Procmail не особенно хорош в обходе структур MIME, но что-то подобное должно быть легко написать, например, с помощью Python и стандартной emailбиблиотеки. Существуют также отдельные инструменты, например, ripmimeкоторые позволяют извлекать выбранные полезные данные из сообщения MIME.

0
William Tang

Большое спасибо всем за ваши ответы.

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

Я наконец нашел решение для того, что искал. У меня была проблема, когда я открывал файл электронной почты, полученный с помощью fetchmail, в нем было много специальных знаков, которые были добавлены. Так что в браузере это не выглядело хорошо, и в тех местах, где его не должно быть, были знаки "=".

Поэтому, чтобы решить эту проблему, я увидел, что когда я открываю файл с помощью Python, в конце каждой строки в нем есть символы "=" и \ n ". Поэтому, когда я удалил все из" = "и" \ n "в конце строки файл выглядел хорошо, когда я снова открыл его в веб-браузере.

Python имеет встроенную функцию для декодирования цитируемых-печати. В дополнение к сворачиванию строк, о котором вы упомянули, вам также необходимо декодировать последовательности вроде `= 3D` в каждой строке. tripleee 5 лет назад 0

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