Вы не объясняете свой код, но похоже, что вы пытаетесь использовать несколько действий при одном условии. Используйте для этого фигурные скобки.
:0
* ^Subject:.*weather
{
:0 bfw
| echo "This is injected text" ; echo "" ; cat
:0 c
! mymail@somedomain.com
}
Чтобы подвести итог, каждый рецепт должен иметь строку заголовка (:0
и возможные флаги) и действие. Условия являются необязательными, и их может быть несколько. Блок дальнейших рецептов - это одна из форм действий, которая удовлетворяет этим требованиям (другие типы действий - это сохранение в папке, передача в команду или пересылка на адрес электронной почты).
Чтобы добавить текст в начало первой части тела MIME из составного сообщения, вам нужно выполнить некоторый анализ MIME. К сожалению, Procmail не имеет явной поддержки MIME, но если вы знаете , что входящее сообщение всегда будет иметь определенную структуру, вам может сойтись с чем-то довольно простым.
:0
* ^Subject:.*weather
{
:0fbw
* ^Mime-version: 1\.0
* ^Content-type: multipart/
| awk '/^Content-type: text\/plain;/&&!s {n=s=1} \
n&&/^$/{n=0; p=1} \
1; \
p{ print "This is injected text.\n"; p=0 }'
:0 c
! mymail@somedomain.com
}
Тело (которое содержит все части тела MIME, с их заголовками и всем прочим) передается в простой сценарий Awk, который находит первую пустую строку после (что мы оптимистично считаем) первой text/plain
части тела MIME заголовок и вставляет туда текст. (Awk чувствителен к регистру, поэтому может потребоваться адаптировать или обобщить текст регулярного выражения, и я предположил, что пробел во входном сообщении является полностью регулярным. Для производственной системы эти упрощающие предположения нереалистичны.)
Если вам нужна полная поддержка MIME (например, входное сообщение может быть или не быть многокомпонентным или содержать вложенные множественные части), я бы порекомендовал написать код для инъекций на каком-нибудь современном языке сценариев с соответствующими библиотеками поддержки MIME; Python был бы моим выбором, хотя он все еще (даже после обновления библиотеки email
в 3.6) немного громоздок и неуклюж.