我需要一些建议/推动正确的方向。
我编写了一些小脚本,接收传入的 HTML 电子邮件,将其转换为 PostScript,然后通过 CUPS 将其发送到指定的打印机。打印机基于电子邮件的收件人。
我正在使用以下方法来实现这一点;
- 进出口
- 收件箱
- 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
进程邮件
#/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
}'
编辑:格式化