2016-09-19 7 views
0

件名に基づいて電子メールを読んだり、base64添付ファイルを取得したり、直接添付ファイルを入手することはできますか? サーバ:LinuxシステムLinuxのコマンドラインから添付ファイルを読む

+2

'formail'プログラムを見てください。この質問はStackExchangeサイト[**スーパーユーザー**](http://superuser.com/)または[** ServerFault **](http://serverfault.com/) –

+0

の方が適切かもしれませんコマンドラインのみを使用し、追加のユーティリティは使用しませんか? –

+1

メッセージと添付ファイルがUUencodeされ、同じファイルの別々の部分としてインクルードされる方法に基づいてわかっているわけではありません。 (いくつかのフォーマットがありますが)。あなたは添付ファイルを読むことができるように添付ファイルを抽出してそれをuudecodeできるものが必要です。 (あなたが7ビットのASCIIを読まない限り)1行でそれを行うためにユーティリティの行を一緒にストリングすることができますが、それを行うために書かれたユーティリティを使うのが良いでしょう。 –

答えて

0

あなたの質問は、単一の添付ファイルがあることと、確実に抽出できることを前提としているようです。一般的なケースでは、電子メールメッセージは基本的に無限の量の添付ファイルを持つことができ、エンコーディングはいくつかのうちの1つになる可能性があります。

しかし、私たちは、あなたが一貫して最初のbase64添付ファイルは常にあなたが望む1になるだろう、静的なメッセージテンプレートを使用して、単一の送信者を扱っていることを

case $(formail -zcxSubject: <"$message") in 
    "Hello, here is your report for "*) 
     awk 'BEGIN { h=1 } 
      h { if ($0 ~ /^$/) h=0 ; next } # skip headers 
      /^Content-Disposition: attachment/ { a=1 } # find att 
      a && /^$/ { p=1; next } 
      p && /^$/ { exit } 
      p' "$message" | 
     base64 -d ;; 
esac 

のようなものを想定する場合、これは解凍されますSubject:ヘッダーを開き、それをグロブパターンと比較します。私はこれがあなたが "主題に基づいて"という意味であることを期待しています - 一致する件名を見つけたらこのメッセージを調べ、それ以外の場合は破棄してください。

粗いAwkスクリプトは、base64データを分離して抽出するためにbase64 -dに渡そうとします。これには、メッセージフォーマットに関するいくつかの厄介なやや粗悪な仮定が含まれており、重大な追加の調整が必要になることがあります。簡単に言うと、ヘッダーをスキップして、添付ファイルを識別するMIMEヘッダーを探し、それを印刷して、メッセージ内のその他すべてをスキップします。このヘッダーが見つからないか、間違ったMIME部分を特定した場合、結果は得られません。また、/^Content-Disposition:/正規表現は理論的にはMIMEヘッダーではない行にマッチする可能性があります(実際にはバウンスメッセージなどを見ていると実際に起こる可能性があります)。

もっと堅牢なアプローチには、実際にMIME構造を解析して必要な部分を抽出するためのMIME抽出ツールまたはカスタムスクリプトが必要です。あなたが必要とするものについての詳細がなければ、私はそれを提供することができません。

formailは、RFC2047エンコーディングについては考えていないので、件名が平易なASCIIではない場合は、送信者の指定されたファイル名を使用することもできます(このスクリプトでは、スクリプトでエンコードされたフォームを指定する必要があります。

+0

こんにちは、粗いAwkスクリプトは、base64データを分離して抽出のためにbase64 -dに渡そうとします。 - どうやってやるの?送信者、件名、添付ファイル名を抽出できます。私はbase64データの抽出に興味があります。 –

+0

私はあなたの質問を理解していません。 Awkスクリプトの詳細についてもっと詳しく知りたいのですか、より多くの機能や異なる機能を備えたスクリプトが必要ですか? – tripleee

+0

私は/ var/spool/mail/userファイルを読んでから、さまざまなテーマに基づいて添付ファイルの詳細を抽出する方法を理解したいと思います。 –

0

Gmailは、そのプロトコルをサポートする任意のクライアントを使用して電子メールを取得できるIMAPサービスを提供します。クライアントがディスク上で利用できるようにする方法はさまざまです。

最も広く使用されているコマンドラインIMAPクライアントはfetchmailでなければなりません。 Ubuntuに簡単にインストールしてから、gmailで使用する特定の設定についてgoogleを使用できます。

fetchmailの1つのことは、リモートサーバーからの電子メールをスローし、ローカルのMTAにパイプすることです。したがって、この設定が機能するには、ローカルで設定されたMTAが必要です。おそらくMTAは電子メールを/ var/mail/$ USERに追加し、このファイルを読んで処理することができます。

もう1つのツールはオフラインです。私はそれを使用していません。 fetchmailよりもセットアップが簡単です。

メールに添付されている添付ファイルを保存する必要がある場合は、mpackをインストールする必要があります。次に、電子メールごとに.txtファイルのmunpackコマンドを実行します(はい、添付ファイルのすべての不具合が含まれています)。添付ファイルをデコードして個々のファイルに保存します:

$ munpack mail.txt 
Invoice.PDF (application/pdf) 
my-picture.png (image/png) 
関連する問題