受け取ったメールに添付されたファイルをとにかくため込んでいきたい。
メールを受信するホストを temp(Ubuntu 18.04)、そのメールを刈り取って添付ファイルを取り出すサーバーを work(Ubuntu 20.04)とする。
やること
- メールを受信してキューにため込むテストサーバー
- メールを刈り取って添付ファイルを取り出すサーバー
- やったこと
- You have mail.
- fetchmailが出力するメッセージへの対応
- fetchmail: WARNING: Running as root is discouraged.
- Logfile "/home/rohhie/mail/log/fetchmail.log" does not exist, ignoring logfile option.
- fetchmail: Server CommonName mismatch: temp != temp.hogeserver.hogeddns.jp
- fetchmail: Server certificate verification error: self signed certificate
- fetchmail: Missing trust anchor certificate: /CN=temp
- fetchmail: OpenSSL reported: error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available
- ツールを使った添付ファイルの取り出し
そんなに多くはなかったが、時間はそれなりにかかった。
メールを受信してキューにため込むテストサーバー
temp をメールを受信してキューにため込むサーバーに仕立てる。
UbuntuのデフォルトMTAはPostfixのようだなので、これをセットアップしていく。
あくまでもテスト用でインターネットにさらすことはしないので設定はユルユル、他のユーザーに公開するわけでもないから証明書もオレオレ。
だけど、メールクライアントソフトを使った最低限のメール送受信はできるようになっている。
Postfixのインストール
まずはPostfixのインストール。
$ sudo apt install postfix インストール中の問い合わせには以下の回答。 * General type of mail configuration: Internet Site * System mail name: temp.hogeserver.hogeddns.jp
サーバーの設定を確認・変更。
/etc/postfix/main.cf
myhostname = temp.hogeserver.hogeddns.jp mydestination = hogeserver.hogeddns.jp, temp, localhost.localdomain, localhost
設定を反映。反映方法がこれで良いのかどうかはよく分からないが、反映はできる模様。
$ sudo systemctl restart postfix
ここまででMTAの設定が完了。
Dovecotのインストール
workからメールを刈り取るためにpop3サーバーを整備。Dovecotは初めて。
$ sudo apt install dovecot-core dovecot-pop3d
ポートの使用状況を見てみるとデーモンがポートをつかんでいる。
$ sudo ss -p -A tcp,udp,raw state listening state unconnected Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 100 0.0.0.0:pop3s 0.0.0.0:* users:(("dovecot",pid=7030,fd=26)) tcp LISTEN 0 100 0.0.0.0:pop3 0.0.0.0:* users:(("dovecot",pid=7030,fd=24)) tcp LISTEN 0 100 0.0.0.0:smtp 0.0.0.0:* users:(("master",pid=3392,fd=13)) tcp LISTEN 0 100 [::]:pop3s [::]:* users:(("dovecot",pid=7030,fd=27)) tcp LISTEN 0 100 [::]:pop3 [::]:* users:(("dovecot",pid=7030,fd=25)) tcp LISTEN 0 100 [::]:smtp [::]:* users:(("master",pid=3392,fd=14))
※メールに関係するところだけ抜粋。
メーラーで動作確認
メールサーバーの動作をチェックするためにメーラーを起動して…おぉ、もう何年もまともに使ってなかったからか、アカウント設定のほとんどがやり直しだったけれど、一応全てが正しく動く状態になった。
で、今回のサーバーのアカウントを追加してみる。
SMTP
25(SMTP over SSL + STARTTLS)で、証明書を検証しない設定(CAで証明書を作ればいいけど、テストなので良し)。
POP
995(POP over SSL)で、証明書を検証しない設定(同)。
これで自分宛のメールを送ったところ、自分にメールが到着。
From: Rohhie rohhie@hogeserver.hogeddns.jp To: rohhie@hogeserver.hogeddns.jp Subject: test Date: Sat, 13 Feb 2021 12:50:31 +0900 Return-Path: rohhie@hogeserver.hogeddns.jp X-Original-To: rohhie@hogeserver.hogeddns.jp Delivered-To: rohhie@hogeserver.hogeddns.jp Received: from hogeserver.hogeddns.jp (client.hogeserver.hogeddns.jp [172.16.nnn.nnn]) by temp.hogeserver.hogeddns.jp (Postfix) with ESMTPS id 9F746100A77 for rohhie@hogeserver.hogeddns.jp; Sat, 13 Feb 2021 03:50:31 +0000 (UTC) MIME-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Message-Id: 26D701BB60098FDDFBEDB8@hogeserver.hogeddns.jp test mail. とどくかなー?
まずはこれで。
メールの保管状況
Postfixがどこにメッセージをキューイングしているかというと、/var/mailだった。
$ ll /var/mail/ total 12 drwxrwsr-x 2 root mail 4096 Feb 13 03:56 ./ drwxr-xr-x 13 root root 4096 Aug 5 2019 ../ -rw------- 1 rohhie mail 880 Feb 13 03:50 rohhie
メールをサーバーに残して受信したところ、先程のメールメッセージが保管されていた。
メールを刈り取ったら、以下の内容に変わった。
/var/mail/rohhie
From MAILER_DAEMON Sat Feb 13 04:07:15 2021 Date: Sat, 13 Feb 2021 04:07:15 +0000 From: Mail System Internal Data <MAILER-DAEMON@temp> Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA Message-ID: <1613189235@temp> X-IMAP: 1613187483 0000000001 Status: RO This text is part of the internal format of your mail folder, and is not a real message. It is created automatically by the mail system software. If deleted, important folder data will be lost, and it will be re-created with the data reset to initial values.
mailbox形式ではこんな感じでメールが管理されていることが分かった。
アカウントの追加
アーカイブしたいメールアドレスが2つあるので、アカウントを追加してみる。
$ sudo adduser journal_one $ sudo adduser journal_two
これでアカウント間のメール送受信ができるようになった。
$ ll /var/mail total 20 drwxrwsr-x 2 root mail 4096 Feb 13 05:12 ./ drwxr-xr-x 13 root root 4096 Aug 5 2019 ../ -rw------- 1 journal_one mail 883 Feb 13 04:28 journal_one -rw------- 1 journal_two mail 907 Feb 13 05:12 journal_two -rw------- 1 rohhie mail 528 Feb 13 04:07 rohhie
メールを刈り取って添付ファイルを取り出すサーバー
work は、tempからメールを刈り取ってきて、添付ファイルを取り出して、アーカイブする作業を定期的に行うサーバーに仕立てる。
Postfixのインストール
メールの刈り取りにfetchmailを使うのだが、fetchmailで刈り取ったメールはデフォルトMTAに送られるので、やっぱりPostfixが必要。
$ sudo apt install postfix インストール中の問い合わせには以下の回答。 * General type of mail configuration: Local only * System mail name: work.hogeserver.hogeddns.jp
※どこにもメールの配送をしないので、Local onlyでセットアップ。
サーバー設定を見直しつつ、メール1通を1ファイルに保管する形式に変更してみる。
/etc/postfix/main.cf
myhostname = work.hogeserver.hogeddns.jp
mydestination = hogeserver.hogeddns.jp, temp, localhost.localdomain, localhost
home_mailbox = .mail/
この設定により、メール保管場所は/var/mail/ユーザー名(mailbox形式)から、~/.mail/メール単位(Maildir形式)に変更される。
Fetchmailのインストールとメールの刈り取り
fetchmailをインストールして設定していく。
定期的に動作させたいものの、メールを刈り取った後にやりたい処理があるので、デーモンモードでは動かさない。
$ sudo apt install fetchmail
fetchmailの動作は、~/.fetchmailrc で制御することができるそう。
最初、クーロンをrootで動かしてメールの刈り取りからアーカイブまでを行うつもりだったが、これは危ないと警告されるので一般ユーザーで実施する。
確かに、外からデーターを取り込む処理なので、sudoersじゃない一般ユーザーの方が安全。
.fetchmailrcについては先輩達が教えてくれている。
はじめての自宅サーバ構築 - Fedora/CentOS - / 外部メールの取り込み(fetchmail)
CentOSで自宅サーバー構築 / 複数ドメイン宛メールの集約(Fetchmail)
マニュアルはこちら。先輩達の教えから、keywordを.fetchmailrcで指定することができると分かる。
ubuntu manuals / fetchmail
ubuntu manuals / fetchmail(日本語) ※読みやすいけれど内容は古い。
/root/.fetchmailrc
# common settings set postmaster root set no bouncemail set logfile "mail/log/fetchmail.log" # ログ出力先 set daemon 0 # デーモンモードで起動しない # default settings defaults fetchall # 全てのメールを取り出す #no fetchal # 新規メールだけを取り出す nokeep # メールを取り出した後に消す(デフォルト) #keep # メールを取り出した後に消さない # journal_one poll temp.hogeserver.hogeddns.jp protocol pop3 port 995 username "journal_one" password "password" ssl sslfingerprint "7F:B6:50:B3:88:51:89:1A:4C:45:E7:9A:52:D8:78:3C" sslproto TLS1+ no sslcertck is rohhie here # rohhieのメールボックスに取り込む # journal_two poll temp.hogeserver.hogeddns.jp protocol pop3 port 995 username "journal_two" password "password" ssl sslfingerprint "7F:B6:50:B3:88:51:89:1A:4C:45:E7:9A:52:D8:78:3C" sslproto TLS1+ no sslcertck is rohhie here
※sslfingerprintの指定は次工程。
今回の環境はオレオレ証明書による通信保護になっているため、sslfingerprintを指定しておかないとメッセージが出まくる。設定方法について、こちらで詳しく教えてくれている。
goungounさんのサイト / 2012/03/16、fetchmail(定周期でメールを受信し転送)(リンク切れのためアーカイブへ)
ログファイルを先に作っておいて、実行してみる。
$ mkdir -p mail/log $ touch mail/log/fetchmail.log $ fetchmail -v
※-vをパラメーターに渡すと詳細ログが出る。
出力されたログから、fingerprintの内容を取り出して、.fetchmailrcに設定。
fetchmail: temp.hogeserver.hogeddns.jp key fingerprint: 7F:B6:50:B3:88:51:89:1A:4C:45:E7:9A:52:D8:78:3C
これで準備完了。fetchmailを改めて実行。
$ fetchmail
メールが空っぽだと、こんなログが出る。
fetchmail: No mail for journal_one at temp.hogeserver.hogeddns.jp fetchmail: No mail for journal_two at temp.hogeserver.hogeddns.jp
メールを受信すると、こんなログが出る。
fetchmail: 1 message for journal_one at temp.hogeserver.hogeddns.jp (876 octets). fetchmail: reading message journal_one@temp.hogeserver.hogeddns.jp:1 of 1 (876 octets) flushed fetchmail: 1 message for journal_two at temp.hogeserver.hogeddns.jp (876 octets). fetchmail: reading message journal_two@temp.hogeserver.hogeddns.jp:1 of 1 (876 octets) flushed
受信したメールは、今回の設定であれば以下に保管される。
$ ll .mail/new/ total 16 drwx------ 2 rohhie rohhie 4096 Feb 14 07:20 ./ drwx------ 5 rohhie rohhie 4096 Feb 14 07:20 ../ -rw------- 1 rohhie rohhie 1262 Feb 14 07:20 1613254827.V802I40080M240979.work -rw------- 1 rohhie rohhie 1262 Feb 14 07:20 1613254827.V802I40083M255173.work
受信したメールの中身はこんな感じ。
Return-Path: <rohhie@hogeserver.hogeddns.jp> X-Original-To: rohhie@localhost Delivered-To: rohhie@localhost Received: from work (localhost [127.0.0.1]) by work.hogeserver.hogeddns.jp (Postfix) with ESMTP id 359744007D for <rohhie@localhost>; Sun, 14 Feb 2021 07:20:27 +0900 (JST) X-Original-To: journal_one@hogeserver.hogeddns.jp Delivered-To: journal_one@hogeserver.hogeddns.jp Received: from temp.hogeserver.hogeddns.jp [172.16.110.2] by work with POP3 (fetchmail-6.4.2) for <rohhie@localhost> (single-drop); Sun, 14 Feb 2021 07:20:27 +0900 (JST) Received: from hogeserver.hogeddns.jp (client.hogeserver.hogeddns.jp [172.16.nnn.nnn]) by temp.hogeserver.hogeddns.jp (Postfix) with ESMTPS id 0A210100154; Sat, 13 Feb 2021 22:19:50 +0000 (UTC) From: Rohhie <rohhie@hogeserver.hogeddns.jp> To: journal_one@hogeserver.hogeddns.jp, journal_two@hogeserver.hogeddns.jp Subject: =?iso-2022-jp?B?GyRCJWEhPCVrNCIkajxoJGokTiVGJTklSBsoQg==?= Date: Sun, 14 Feb 2021 07:19:44 +0900 MIME-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Message-Id: <2CD7025654CF70DDFBEDB8@hogeserver.hogeddns.jp> メールを送信。 宛先としてoneとtwoの2つを指定。 --- Rohhie. ---
添付されているファイルの切り出し
きっとコマンドがあるだろうと高をくくっていたら、できるけれども想定している動きと少し違う。
ファイルが取り出せなかったり、取り出せるけどヘッダーが全て切り取られてしまったりとか。
そのため、添付さているファイルの切り出しをスクリプトでやってしまえと考えた。
Postfixが保存するファイルはこんな形になっていた。
Return-Path: <rohhie@hogeserver.hogeddns.jp> X-Original-To: rohhie@localhost <省略> From: Rohhie <rohhie@hogeserver.hogeddns.jp> To: journal_one@hogeserver.hogeddns.jp, <省略> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary-x4E2iwnpz7aQVOg93dZLb" ← (0) X-Mailer: HidemaruMail 6.98 (WinNT,A00) Message-Id: <2FD70275452C23DDFBEDB8@hogeserver.hogeddns.jp> --Boundary-x4E2iwnpz7aQVOg93dZLb ← (1) Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit 複数のファイルが添付されているメールを添付した場合にどうなるのか。 --Boundary-x4E2iwnpz7aQVOg93dZLb ← (2) Content-Type: message/rfc822 Content-Transfer-Encoding: 7bit From: Rohhie <rohhie@hogeserver.hogeddns.jp> To: journal_one@hogeserver.hogeddns.jp, <省略> ここにまるごと元メールが展開される。 さらに添付されているファイルは、添付されたメールのBoundaryで区切られていた。 --Boundary-x4E2iwnpz7aQVOg93dZLb-- ← (3)
こんな形で区切られているので、(2)~(3)の間を抜き出せれば、添付されているファイルを取り出せる。
下調べ
ということで、ほとんどテキストファイルの操作。
メールの中身は表示できる文字ばっかりなので、扱いやすい方なのだろう。
■Content-Typeの境界となる文字列を切り出す
CodeZine / AWKで一番の得意ワザ! シェルで文字列を自在に扱うための文字列関数
$ grep -m1 '^Content-Type:' a.eml | awk 'match($3, /".*"/) {print substr($3, RSTART+1, RLENGTH-2)}' Boundary-x4E2iwnpz7aQVOg93dZLb
■境界となる文字列が含まれる行の行番号だけを切り出す
stackoverflow / Use grep to report back only line numbers
$ grep -n "Boundary-x4E2iwnpz7aQVOg93dZLb" a.eml | cut -f1 -d: 22 26 33 574
■改行で区切られたテキストを変数配列にする
Qiita / bashでテキストファイルを簡単に配列にする方法
BLINES=(grep -n "Boundary-x4E2iwnpz7aQVOg93dZLb" a.eml | cut -f1 -d:
| xargs
)
※括弧で囲まないと、空白区切りの文字列が0番目に入る。
■テキストファイルから指定した範囲の行を取り出す
逆引きUNIXコマンド / 指定した範囲の行を取得する方法
$ cat a.eml | sed -n '34,573p' > a-dash.eml
■境界となる文字列の直後に続くContent-*が終わる行
$ grep -m1 -n -v "^Content-" a-dash.eml | cut -f1 -d: 3
■ファイルの最初にある空行を削除
stackoverflow / SED command to delete empty lines till the first occurrence of sentence
$ sed -n '/./,$p'
■大量のファイル削除
PC、サーバーのちょっとした小技 / 大量のファイルをrmコマンドで削除できない場合の備忘録
xargsを使うと、渡せる引数の限界まで渡してrmコマンドが実行される模様。
りんごとバナナとエンジニア / 大量のファイルを一気に消したい時はxargsを使う
$ echo mail/work/* | xargs rm
■Postfixのメール削除
postqueコマンドで問い合わせてみたものの、Maildir形式の場合はPostfixのキューにはならない模様。
直接ファイルを削除することにした。
Dovecotを導入している場合はDovecot経由で削除するっぽいことが書かれているが、このサーバーにはインストールする気がないので多分問題なし。
Stack Exchange / Can I delete or move mail files from maildir cur folder?
それっぽいスクリプト
完全無保証、かつ、素人さんの作り。エラーコードも適当。とりあえず動いたバージョン。
前提となるディレクトリ構成。
~/ ├ mailwork … 今回作成したスクリプト │ ├ .mail/ │ ├ cur/ │ ├ new/ … Postfixがメールを保管してくれる場所 │ └ tmp/ │ └ mail/ ├ work/ … 添付が1つだけのメール(添付が取り出される) ├ failed/ … 添付がない、あるいは、複数ある(そのまま放り込まれる) └ log/ … fetchmailのログ出力先
~/mailwork
#!/bin/bash RESULT=0 BKNAME=`date "+%Y%m%d_%H%M%S"` cd # メールを刈り取ってくる(.fetchmailrcが整備されている前提) fetchmail if [ $? -gt 0 ] then exit 16 fi # 取り込んだメールを全て処理する for MAILS in `ls .mail/new/` do # 添付ファイルの境界文字列を取り出す BSTRING=`grep -m1 '^Content-Type:' .mail/new/$MAILS | awk 'match($3, /".*"/) {print substr($3, RSTART+1, RLENGTH-2)}'` # 境界文字列が含まれる行を取り出す BLINES=(`grep -n "$BSTRING" .mail/new/$MAILS | cut -f1 -d: | xargs`) # 添付ファイルは1つの前提で切り出し処理をしていく if [ 4 = ${#BLINES[@]} ] then # 抜き出し範囲を計算(境界文字列の行も消す) ST=$((BLINES[2]+1)) ED=$((BLINES[3]-1)) # 添付部分のみ抜き出して保存 cat .mail/new/$MAILS | sed -n "${ST},${ED}p" > mail/work/$MAILS.eml if [ $? -gt 0 ] then RESULT=$(($RESULT | 1)) cp -a .mail/new/$MAILS mail/failed/$MAILS if [ $? -gt 0 ] then RESULT=$(($RESULT | 2)) exit $RESULT fi fi # 先頭に残っているコンテンツの形式を示す行を削除 ST=`grep -m1 -n -v "^Content-" mail/work/$MAILS.eml | cut -f1 -d:` sed -i -n "${ST},$$p" mail/work/$MAILS.eml # 先頭に空行が残っていたら削除 sed -i -n "/./,$$p" mail/work/$MAILS.eml else # 添付ファイルがない、あるいは、2つ以上の場合は、他のディレクトリに避けておく cp -a .mail/new/$MAILS mail/failed/$MAILS if [ $? -gt 0 ] then RESULT=$(($RESULT | 4)) exit $RESULT fi fi # 処理済みのメールを削除する rm .mail/new/$MAILS done # ファイルをアーカイブする cd mail zip -r -q $BKNAME.zip work/ failed/ if [ $? -gt 0 ] then RESULT=$(($RESULT | 8)) cd exit $RESULT fi # アーカイブ済みのファイルを削除 cd if [ -n "$(ls mail/work)" ] then echo mail/work/* | xargs rm fi if [ -n "$(ls mail/failed)" ] then echo mail/failed/* | xargs rm fi exit $RESULT
これをcronに登録して定期的に実行すればメールの添付ファイルがアーカイブされる。
呼び出すのが1時間ごとなら1時間単位のアーカイブになるし、1日ごとなら1日単位のアーカイブになる。
アーカイブされたファイルの保管は今回の記事の範疇から外した。
やったこと
You have mail.
temp(メールを受信してキューにため込む側のサーバー)にSSHでログインしたら You have mail. のメッセージ。
メールを確認してみる(mailコマンドがなかったので、mailutilsをインストールしてます)。
$ mail "/var/mail/rohhie": 1 message > 1 Mail System Intern Sat Feb 13 04:07 11/482 DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA ? 1 Date: Sat, 13 Feb 2021 04:07:15 +0000 From: Mail System Internal Data <MAILER-DAEMON@temp> Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA Message-ID: <1613189235@temp> X-IMAP: 1613187483 0000000001 Status: RO This text is part of the internal format of your mail folder, and is not a real message. It is created automatically by the mail system software. If deleted, important folder data will be lost, and it will be re-created with the data reset to initial values. ? exit
このテキストはメールフォルダの内部形式の一部であり、実際のメッセージではありません。 メールシステムソフトウェアによって自動的に作成されます。 削除すると重要なフォルダデータが失われ、データが初期値にリセットされて再作成されます。
Google先生による翻訳
これは、メールクライアントやfetchmailでメールを全て刈り取った後に自動的に放り込まれる模様。
消すなと言っているので、そのままにしておこう。
fetchmailが出力するメッセージへの対応
実験中に色々なメッセージが出たので、それぞれについて。
fetchmail: WARNING: Running as root is discouraged.
rootで実行することはオススメできませんよ、という話。
fetchmail自体をやられるとroot権限を取られてしまうのでやめた方がいい、という話。
LinuxQuestions.org / Running fetchmail as root
Logfile "/home/rohhie/mail/log/fetchmail.log" does not exist, ignoring logfile option.
事前にファイルを作っておかないとこのエラーが出る。touchしてファイルを作っておく。
fetchmail: Server CommonName mismatch: temp != temp.hogeserver.hogeddns.jp
どうも、サーバーを逆引きして、サーバー違うけど?と言ってきている模様。
正直なところよく分からないが、このログを無視するように rsyslog にフィルターを掛けてしまうらしい。
LinuxQuestions.org / fetchmail warning : Server CommonName mismatch
fetchmail: Server certificate verification error: self signed certificate
サーバーが自己署名証明書を提示してきているので仕方がない。
この場合、fetchmailを -v オプションを付けて実行し、そこに表示される fingerprint を設定ファイルに入れる。
goungounさんのサイト / 2012/03/16、fetchmail(定周期でメールを受信し転送)(リンク切れのためアーカイブへ)
# fetchmail -v
/var/log/fetchmail.log ※当該の行を抜粋。
fetchmail: temp.hogeserver.hogeddns.jp key fingerprint: 7F:B6:50:B3:88:51:89:1A:4C:45:E7:9A:52:D8:78:3C
これを .fetchmailrc に加える。
poll temp.hogeserver.hogeddns.jp username "journal_one" password "password" ssl sslfingerprint "7F:B6:50:B3:88:51:89:1A:4C:45:E7:9A:52:D8:78:3C"
fetchmail: Missing trust anchor certificate: /CN=temp
実際にはこんな感じのログが出ている。
fetchmail: Missing trust anchor certificate: /CN=temp fetchmail: This could mean that the root CA's signing certificate is not in the trusted CA certificate location, or that c_rehash needs to be run on the certificate directory. For details, please see the documentation of --sslcertpath and --sslcertfile in the manual page. fetchmail: OpenSSL reported: error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed fetchmail: temp.hogeserver.hogeddns.jp: SSL connection failed.
これは、通信プロトコルをtls1に設定することで回避できる模様。
LinuxQuestions.org / openssl-1.1.1 upgrade breaks fetchmail with gmail
poll temp.hogeserver.hogeddns.jp
ssl
sslfingerprint "7F:B6:50:B3:88:51:89:1A:4C:45:E7:9A:52:D8:78:3C"
sslproto TLS1+
※最終的にマニュアルを見て TLS+ として解決。
fetchmail: OpenSSL reported: error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available
日本語のマニュアルを見ても分からなかったが…バージョンアップで証明書のチェックがオンになっているそうで。
オレオレなので証明書のチェックを外す。
ubuntu manuals / fetchmail
poll temp.hogeserver.hogeddns.jp
ssl
sslfingerprint "7F:B6:50:B3:88:51:89:1A:4C:45:E7:9A:52:D8:78:3C"
sslproto TLS1+
no sslcertck
ツールを使った添付ファイルの取り出し
さて、添付ファイルをどうやって取り出すか…procmailを使うと色々できそうではあるもののなんか壮大。
munpack
最初に見つかったのがこちら。
マイノリティでいこう / 複数のメールファイルから添付ファイルをまとめて取り出し(munpack)
早速インストールして実行してみる。
$ sudo apt install mpack $ munpack from.eml tempdesc.txt: File exists Did not find anything to unpack from from.eml
これは、メール(emlファイル)を添付したメールでの実験結果で、取り出すことはできなかった。
どうやらこのコマンドはだいぶ古く、しかもあるところからLinux版のメンテナンスが終わっていて、最終版はWindows用なのだとか。
以前のバージョンのUbuntuだったらイケたのかもしれないが、今回は断念。
ripMIME
そこから色々たどっていったら、ここにたどり着く。
LinuxQuestions.org / munpack 1.6 does not unpack to correct filenames
ubuntu manuals / ripMIME
$ sudo apt install ripmime
やってみたところ、メールが3分割されて格納された。
メールの着信時間やメッセージIDでファイルを作ることができず、ユニークを保つのが大変そう。
そして、分割されたメッセージを確認したところ、ヘッダ情報が全てカットされていた。
これは狙っているものと違うので断念した。
さいごに
出だしのPostfixやDovecotは実はサクサクと設定ができて快調だったのだが、fetchmailあたりから進捗が落ちてきて、最後の添付ファイル取り出しに至っては調査に手間が掛かってヤバかった…。
ところで、Maildir形式というのは今回初めて扱ったけれど、なんか簡単でいいな。
色々なところから来るメッセージの全てをこのロジックで処理できるといいのだけれど。
コメントはこちらから お気軽にどうぞ ~ 投稿に関するご意見・感想・他