Как предварительно обработать мои электронные письма, чтобы иметь ссылки на мои вложения - PullRequest
2 голосов
/ 12 сентября 2011

Я использую mutt over ssh в качестве почтового клиента. Это прекрасно работает, но просмотр вложений (в основном изображений) немного раздражает. Теперь моя идея состоит в том, чтобы проанализировать электронную почту, сохранить вложения на моем сервере, создать URL-адрес для доступа к вложению и поместить этот URL-адрес в электронное письмо. Кто-нибудь уже сделал это? Какой простой способ добиться этого?

Я уже использую procmail для фильтрации содержимого, могу ли я использовать его для вставки текста в мою электронную почту?

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 сентября 2011

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

В качестве простого начального примера, предположим, что вы извлекли вложение в ~/public_html/prv/att000.jpg и настроили свой веб-сервер для обслуживания этого на http://localhost:8080/~you/prv/att00.jpg, вы можете добавить заголовок, подобный этому;

:0fhw
| formail -I"X-Tracted: http://localhost:8080/~you/prv/att00.jpg"

Добавить что-то встроенное в само сообщение сложнее, но это отнюдь не невозможно.

Редактировать: Ваш сценарий может быть упрощен, чтобы не использовать временный файл (и, кроме того, избегайте многократного Бесполезного использования Cat ), если вы извлекаете идентификатор сообщения из в вашем рецепте:

# Whitespace in [square brackets] is tab, space
:0c
* ^Message-Id:[   ]*<\/[^@>]+
| (mkdir -p "webserver path"/"$MATCH"; munpack -C "webserver path"/"$MATCH" )

... но, возможно, вы хотите сохранить свой сценарий (без «Бесполезных кошек») и изменить его так, чтобы он не только извлекал вложения, но и создавал измененное сообщение в стандартном выводе со ссылками на вложенные файлы. .

Я могу предложить три варианта, каждый из которых немного громоздок. Предположим, что ваше входящее сообщение является (multipart / mixed (text / plain (multipart / related text / html image / png image / png))); Вы могли бы

  1. Оберните ваше сообщение в (multipart / related (text / plain: ваш список ссылок здесь) (message / rfc822: оригинальное сообщение здесь: (multipart / mixed (текст / обычный (multipart / related text / html) image / png image / png)))). Для этого вообще не требуется разбирать исходное сообщение, но неудобно его просматривать на большинстве клиентов.

  2. Предположим, что всегда есть текстовая или обычная часть, и прикрепите список ссылок к ее концу. Это требует логики для поиска и расширения первой текстовой / простой части и некоторого запасного варианта, если в первой части нет текстовой / простой части.

  3. Предположим, что все ваши сообщения состоят из нескольких частей / *, и просто добавьте текстовую / обычную часть в начале, как самую первую часть, или сразу после первой текстовой / простой части. Это требует той же логики и может показаться неудобным для просмотра на некоторых клиентах, но делает меньше предположений о входящем сообщении, и поэтому может быть безопаснее.

Если вы можете закодировать это, вызвать Procmail на нем довольно просто; просто опустите флаг h из предыдущего рецепта (который указывает только фильтрацию в заголовках).

:0fw
| replace-entire-message-with-a-different-message
0 голосов
/ 12 сентября 2011

На данный момент у меня есть это:

в procmail я делаю копию следующим образом:

:0c
| myscript.sh

затем в myscript.sh

path="webserver path"

tee _temp >& /dev/null # is there a different way of doing this?

# extract message-id
mid=$(cat _tempmail | formail -c -x message-id - | sed 's/ <\(.*\)@.*>/\1/')

mkdir $path/$mid

# extract all attachments into directory depending on the message id
cat _tempmail | munpack -C $path/$mid

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

Как и предположил tripleee, я мог бы добавить этот URL в качестве заголовка.

Было бы здоровоесли в сообщении есть ссылка, возможно, я сделаю это в другой раз.На данный момент я в порядке с этим решением.

...