muttで電子メールを印刷する - 改行を避ける方法は?

muttで電子メールを印刷する - 改行を避ける方法は?

私は電子メールクライアントとしてmuttを使用しており、最近の電子メール印刷設定を変更することにしました。

私はMuttprintについて知っていますが、それを使用しないことにしました。私は次のことを思い出しました。

上記には.muttrc次のものがあります。

set print_command="grep -v X-Spam-Status | $HOME/bin/mutt_print.sh"

~/bin/mutt_print.sh私がオンラインで見つけたスクリプトを修正したものは次のとおりです。

#!/bin/bash

PDIR="$HOME/tmp/mutt_print" 
OPEN_PDF=zathura

# create temp dir if it does not exist
if [ ! -d "$PDIR" ]; then
    mkdir -p "$PDIR" 2>/dev/null
    if [ $? -ne 0 ]; then
        echo "Unable to make directory '$PDIR'" 1>&2
        exit 2
    fi
fi

infile="`mktemp $PDIR/mutt_XXXXXXXX.txt`"
tmpfile="`mktemp $PDIR/mutt_XXXXXXXX.ps`"
outfile="`mktemp $PDIR/mutt_XXXXXXXX.pdf`"

echo "infile = $infile"
echo "tmpfile = $tmpfile"
echo "outfile = $outfile"

while read line
do
  echo "$line" >> $infile
done < "${1:-/dev/stdin}"

echo "running vim $infile -c \"hardcopy > $outfile | q\""
vim $infile -c "hardcopy > $tmpfile | q"
echo "running ps2pdf $tmpfile $outfile"
ps2pdf $tmpfile $outfile

read
$OPEN_PDF $outfile >/dev/null 2>&1 &
sleep 1
rm $infile $tmpfile $outfile

したがって、メッセージを印刷することを決定すると、MuttはZathuraでメッセージを開き、印刷したりPDFとして保存したりできます。これが私が望む設定です。

grepしかし、私は一度行を削除しましたが、X-Spam-Status常に動作しているわけではありません。時には、次のようなものが印刷コマンドに送信される前に破損しているように見え、その一部がPDFに表示されました。

Date: Wed, 11 May 2016 21:17:14 −0300
From: John Doe <[email protected]>
To: my-email@here
Subject: Re: blah
tests=FREEMAIL_FROM,HTML_MESSAGE,RDNS_NONE,T_DKIM_INVALID

X-Spam-Status元のメッセージの行は次のとおりです。

X-Spam-Status: No, hits=2.4 required=8.0 tests=FREEMAIL_FROM,HTML_MESSAGE,RDNS_NONE,T_DKIM_INVALID

required=8.0そして間に切れましたtests...

それでは、この行が途切れるのをどのように防ぐことができますか?

(スクリプトの改善に関する提案も歓迎します)

ベストアンサー1

X-Spam-Statusこの行は、複数行にまたがる「連続」RFC822ヘッダーのようです。

タイトルは、行の最初の文字にスペースがない文字で始まります。先頭に空白がある空でない行は前の行の連続であり、空の行はヘッダーを終了します。

特定のヘッダーをフィルタリングするには、.RFC822よりも優れている必要がありますgrep。たぶん物事perlawkものです。

あなたは何かをすることができます

while read line
do
  echo "$line" >> $infile
done < "${1:-/dev/stdin}"

aで始まる行をエコーせずにX-Spam-Status(フラグ設定)、新しいヘッダーが表示されるまで「連続」行をスキップするのと同じです(フラグを消去します)。

いずれにせよ、プログラムはRFC822ヘッダーの形式を理解する必要があります。

おそらく、印刷物のヘッダーにそのような興味があるかどうか自分自身に尋ねる必要があります。

フィルタはそれほど難しくありませんが、

#!/user/bin/perl

my $skip=0;

# First do the headers
while(<STDIN>)
{
        #Test for end of headers
        if(/^\s*$/)
        {
                #copy the header ending blank
                printf $_;

                #exit the while loop
                last;
        }

        #Starts with non whitespace, new header
        $skip = 0 if /^\S/;

        #skip stuff if its the header we don't want
        $skip = 1 if /^X-Spam-Status/i;

        #copy lines if we're not skipping
        print $_ if !$skip;
}

# now the rest of the file
while(<STDIN>)
{
        #copy lines
        print $_;
}

おすすめ記事