Мне нужен небольшой совет / толчок в правильном направлении.
Я написал несколько небольших скриптов, которые принимают входящее электронное письмо в формате 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 генерируется ошибка, и обратно отправителю отправляется отчет о недоставке о том, что при открытии изображений произошла ошибка. Ошибка при открытии cid:logo.jpg
- Файл PostScript успешно распечатан, но явно не содержит изображений из электронного письма.
Мой вопрос: как мне получить эти изображения из электронной почты, чтобы они были успешно распечатаны в файле PostScript?
Я более чем счастлив преобразовать в PDF, если PostScript не подходит, но даже преобразование в 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
}'
РЕДАКТИРОВАТЬ: форматирование
cat
- person tripleee   schedule 31.05.2016export f
кажется лишним. Экспорт делает переменную видимой для подпроцессов; но здесь, похоже, ни один подпроцесс не использует эту переменную. - person tripleee   schedule 31.05.2016