Я также использую Bugzilla для обработки публично зарегистрированных ошибок. Но я не хочу создавать учетную запись для тех, кто может отправить отчет об ошибке. Это легко сделать, изменив заголовок From SMTP. Но, конечно, я хотел бы, чтобы электронное письмо отправителя было видимым где-то в пределах ошибки.Многострочная обработка по SED для изменения входящего отправителя электронной почты и сохранения их электронной почты в комментариях bugzilla
Я борюсь с тем, как сделать sed, чтобы положить линию в качестве первой строки части текста/текста электронной почты. вопрос сводится к тому, как поставить конкретную строку после первой пустой строки после блока строк, где находится линия совместимой с REGEXP /\(Content-Type: text\/plain.*\)/
В настоящее время я в состоянии поставить его после Content-Type: text/plain
линии, которая всегда присутствует. Проблема в том, что иногда это не последняя строка заголовка SMTP. Content-Transfer-Encoding: quoted-printable
или другой заголовок может следовать. (достаточно позаботиться о части текста/простой части, которая либо сама по себе, либо входит в пару с частью текста/html, которая не должна обрабатываться, поскольку bugzilla принимает ее только как приложение в любом случае.)
до сих пор я использую .procmailrc для предварительной обработки входящих сообщений электронной почты:
LOGFILE=/home/bugmail/procmail.log
## Mails from myserver.com goes to bugzilla as-is
:0
* ^To:.*@otherservice.com.*
* ^From:.*@myserver.com.*
|/var/www/www.alfa.myserver.com/bugzilla/email_in.pl -vvv --default op_sys=All --override product="app-support" --default rep_platform=All --override component="Startovac" --default version=unspecified
## Mails from myserver.com goes to bugzilla as-is
:0
* ^From:.*@myserver.com.*
|/var/www/www.alfa.myserver.com/bugzilla/email_in.pl -vvv --default op_sys=All --override product="app-support" --default rep_platform=All --override component="Default" --default version=unspecified
## Mails from external address that is multipart/*
:0
* ^To:.*@otherservice.com.*
* Content-Type: multipart/*
| sed -n 's/\(Content-Type: text\/plain.*\)/\1\n\nFromNew: [email protected]/; p' | sed '/^From:\(.*@.*\)/{h; s//FromNew: [email protected]/;b};/FromNew: [email protected]/x' | sed -e '1,/^From:/s/^From:/FromOriginal:/' | sed -e '1,/^FromNew:/s/^FromNew:/From:/' |/var/www/www.alfa.myserver.com/bugzilla/email_in.pl -vvv --default op_sys=All --override product="app-support" --default rep_platform=All --override component="Specificcomponent" --default version=unspecified
## Mails from external address that is multipart/*
:0
* Content-Type: multipart/*
| sed -n 's/\(Content-Type: text\/plain.*\)/\1\n\nFromNew: [email protected]/; p' | sed '/^From:\(.*@.*\)/{h; s//FromNew: [email protected]/;b};/FromNew: [email protected]/x' | sed -e '1,/^From:/s/^From:/FromOriginal:/' | sed -e '1,/^FromNew:/s/^FromNew:/From:/' |/var/www/www.alfa.myserver.com/bugzilla/email_in.pl -vvv --default op_sys=All --override product="app-support" --default rep_platform=All --override component="Default" --default version=unspecified
## Mails from external address that is only text/plain
:0
* ^To:.*@myserver.com.*
|sed -e '1,/^$/s/^$/\nFromNew: [email protected]/' | sed '/^From:\(.*@.*\)/{h; s//FromNew: [email protected]/;b};/FromNew: [email protected]/x' | sed -e '1,/^From:/s/^From:/FromOriginal:/' | sed -e '1,/^FromNew:/s/^FromNew:/From:/' |/var/www/www.alfa.myserver.com/bugzilla/email_in.pl -vvv --default op_sys=All --override product="app-support" --default rep_platform=All --override component="Default" --default version=unspecified
## Mails from external address that is only text/plain
:0
* ^To:.*@otherservice.com.*
|sed -e '1,/^$/s/^$/\nFromNew: [email protected]/' | sed '/^From:\(.*@.*\)/{h; s//FromNew: [email protected]/;b};/FromNew: [email protected]/x' | sed -e '1,/^From:/s/^From:/FromOriginal:/' | sed -e '1,/^FromNew:/s/^FromNew:/From:/' |/var/www/www.alfa.myserver.com/bugzilla/email_in.pl -vvv --default op_sys=All --override product="app-support" --default rep_platform=All --override component="Specificcomponent" --default version=unspecified
Таким образом, если отправитель не приходит от myserver.com, от устанавливается как [email protected] (который существующий пользователь Bugzilla), а оригинал От электронной почты перемещается в первую строку тела электронной почты.
Проблема возникает, когда заголовок Content-Type: text/plain
сопровождается другими заголовками. Текст затем помещается в комментарий Bugzilla как
>> Pokou=C5=A1el jsem se vlo=C5=BEit obr=C3=A1zek pomoc=C3=AD tla=C4=8D=C3=
который не очень читается.
Возможно, SED
не подходит, но я хотел бы сохранить предварительную обработку как однострочный фильтр в .procmailrc, чтобы держать его в одном месте.