我也在使用 Bugzilla 来处理公开报告的错误。但我不想为任何可能发送错误报告的人创建帐户。通过更改 From SMTP 标头可以轻松完成。但我当然希望让发件人电子邮件在错误中的某处可见。
我正在努力使 sed 将该行作为电子邮件纯/文本部分的第一行。问题归结为如何在符合 REGEXP 的行之后的第一个空行之后放置特定行
/\(Content-Type: text\/plain.*\)/
目前,我可以将它放在
Content-Type: text/plain
始终存在的行之后。问题是有时它不是 SMTP 标头的最后一行。
Content-Transfer-Encoding: quoted-printable
或其他标题可能会跟随。(处理单独或与 text/html 部分配对的 text/plain 部分就足够了,因为 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: app-support@myserver.com/; p' | sed '/^From:\(.*@.*\)/{h; s//FromNew: app-support@myserver.com/;b};/FromNew: app-support@myserver.com/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: app-support@myserver.com/; p' | sed '/^From:\(.*@.*\)/{h; s//FromNew: app-support@myserver.com/;b};/FromNew: app-support@myserver.com/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: app-support@myserver.com/' | sed '/^From:\(.*@.*\)/{h; s//FromNew: app-support@myserver.com/;b};/FromNew: app-support@myserver.com/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: app-support@myserver.com/' | sed '/^From:\(.*@.*\)/{h; s//FromNew: app-support@myserver.com/;b};/FromNew: app-support@myserver.com/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
因此,如果 Sender 不是来自 myserver.com ,则 From 设置为 app-support@myserver.com(这是现有的 Bugzilla 用户),并且原始 From 电子邮件被移动到电子邮件的第一行身体。
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 中的单行,以将其保留在一个地方。