【发布时间】:2016-05-31 16:06:59
【问题描述】:
我需要一些建议/推动正确的方向。
我编写了一些小脚本,它们接收传入的 HTML 电子邮件,将其转换为 PostScript,然后通过 CUPS 将其发送到指定的打印机。打印机基于电子邮件的收件人。
我正在使用以下方法来实现这一点;
- 进出口
- Procmail
- HTML2PS
- 两个自定义脚本(发布在下面)
流程
- Exim 收到一封电子邮件并传递给 Procmail
- .procmailrc 调用自定义脚本“process_mail”,将主题和内容作为参数传递
- “process_mail”将内容拉入一个函数并调用“get_html_from_message”(我还没有对主题做任何事情)
- “get_html_from_message”转储除 HTML 之外的所有内容
- 然后将 HTML 转换为 PostScript
- PostScript 文件被发送到指定的打印机。
问题
- 在 HTML2PS 阶段会生成错误,并将 NDR 发送回发件人,说明打开图像时出错。 打开 cid:logo.jpg 时出错
- PostScript 文件已成功打印,但显然不包含电子邮件中的图像。
我的问题是:如何从电子邮件中取出这些图像,以便它们在 PostScript 文件中成功打印出来?
如果 PostScript 不适合,我很乐意转换为 PDF,但即使转换为 PDF,我也没有图像,因为我无法获取它们。
.procmailrc
SHELL=/bin/bash
# Extract the subject and normalise
SUBJECT=`formail -x"Subject: "\
| /usr/bin/tr '[:space:][:cntrl:][:punct:]' '_' | expand | sed -e 's/^[_]*//' -e 's/[_]*$//'`
YMD=`date +%Y%m%d`
MAKE_SURE_DIRS_EXIST=`
mkdir -p received_mail/backup
if [ ! -z ${SUBJECT} ]
then
mkdir -p received_mail/${YMD}/${SUBJECT}
else
mkdir -p received_mail/${YMD}/no_subject
fi
`
# Backup all received mail into the backup directory appending to a file named by date
:0c
received_mail/backup/${YMD}.m
# If no subject, just store the mail
:0c
* SUBJECT ?? ^^^^
received_mail/${YMD}/no_subject/.
# Else there is a subject, generate a unique filemane, place the received email
# in that file and then execute process_mail passing the filename and subject as parameters
:0Eb
| f=`uuidgen`; export f; cat > received_mail/${YMD}/${SUBJECT}/${f}; $HOME/bin/process_mail received_mail/${YMD}/${SUBJECT}/${f} "${SUBJECT}"
# and don't deliver to standard mail, don't want to clutter up the inbox.
:0
/dev/null
process_mail
#/bin/bash
# Test Printer
printer=$(whoami)
file=$1
subject=$2
function process_rrs {
typeset file
file=$1
cat $file \
| $HOME/bin/get_html_from_message \
| html2ps \
| lp -d ${printer} -o media=a4 2>&1
}
case "$subject" in
*)
process_rrs $file
;;
esac
get_html_from_message
cat | awk '
BEGIN {
typeout=0
}
{
if($0 ~ /<html/)
typeout=1
if($0 ~ /^------=/)
typeout=0
if(typeout)
print $0
}'
编辑:格式化
【问题讨论】:
-
export f似乎是多余的。导出使变量对子流程可见;但这里似乎没有子进程正在使用这个变量。 -
谢谢。我会在早上研究这个。一直在学习:)