マイメールサーバー(IMAP)に添付ファイル(PDFなど)を含む電子メールがたくさんあります。これらの添付ファイルはスペースを無駄にします。私のサーバーのHDDスペースはホスティング会社によって制限されています。私は電子メールの添付ファイルを削除してそのスペースの一部を取り戻そうとします。 (ほとんどすべてがローカルにダウンロードまたはアップロードされるため、メールサーバーで重複しています。)
(以前)Windowsを使用すると、メールサーバーにログインし、メッセージを操作し、添付ファイルを削除するために使用できる「クライアントタイプ」Eメールハンドラ「IMAPSize」というアプリケーションがありました。しかし、私はUnix / Linuxを使用していましたが、(これまで)使いやすさと作業の完了という点で同様のものが見つかりませんでした。 (たとえ私たちがより良い、より強力なソリューションを持っているかもしれませんが、どのソリューションなのかわかりません。)
私はmunpack(ローカルにインストールして使用する)とripmimeについて知っていますが、これらのプログラムはローカルに保存されたメッセージであるMboxまたはMailDirを処理するように設計されているようです。私は電子メールをローカルで同期せずに私たちのサーバーに残します。 (電子メールが多すぎて合計100,000個を超えています。)
そしてMunpackは添付ファイルの抽出にかなり上手なようですが、メッセージ自体を破壊せずに添付ファイルだけを削除する方法を見つけることができませんでした。
Web GUI で Horde、Roundcube、SquirrelMail を使用できますが、添付ファイルを削除する方法が見つかりませんでした。
また、複雑な設定や構成などを含まないソリューションを探しています。 (私は夢を見ているか、あまりにも多くを求めているかもしれません。)
私はこのアプローチを試したいと思います。オフラインimapを使用してすべての電子メールをローカルにダウンロードして同期し、munpackまたはripmimeを使用して添付ファイルを削除できます(単に抽出するのではなく、そうする方法を見つけることができるとします)。 -サーバーと同期すると、電子メールは添付ファイルなしでサーバーに戻りますが、a)動作しているかどうかはわかりません。
私は私のための解決策があると確信しています。 (おそらく、サーバーから電子メールを操作したり添付ファイルを削除したりすることができるクライアントタイプのGUIアプリケーションの種類、または他のあまり複雑ではありません。)
注:私はThunderbirdを使用せず、それをインストールまたは使用するつもりはありません。 Wineも同様です。私は可能な限り少ないスペースを占めるアプリを使って、私のボックスを「最小化」のままにしようとします。
正しい方向を教えてくれてありがとう。
答え1
stdinからすべての添付ファイルを削除し、stdoutを返す次のPerlコードがあります。これが役に立ちます。
#!/usr/bin/perl -w
use strict;
use Mail::Audit;
use Mail::Audit::Attach qw(Attach);
my $mail = Mail::Audit->new;
my $attachments = $mail->attachments;
foreach (@$attachments)
{
$_->remove;
}
$mail->print();
Maildirのファイルの単純なループの代わりに添付ファイルを削除したいとしましょう。
for filename in <list>
do
./strip.pl < "$filename" > "$filename".lock && mv "$filename".lock "$filename"
rm "$filename".lock
done
興味深い修正方法は、まず添付ファイルを抽出し、メッセージから削除する前に別々に保存することです。
foreach (@$attachments)
{
$_->save("/path/to/attachment/dir");
$_->remove;
}
ただし、まずバックアップしてください。)
答え2
頑張ったIMAPサイズ同じですがサポートされなくなり、時には競合が発生し、削除する必要があるようなメッセージが残ります。しかも添付のキャンセルGmailユーザーのためのアプリですが、保証することはできません。
この問題を直接解決するのに役立つPythonスクリプトを作成しました。IMAPサイズ削減
実行されるたびに、指定されたフォルダで動作します。コマンドラインからPythonスクリプトを実行する方法、サーバーにログインする方法(URL、ユーザー名、パスワード)、およびIMAPフォルダの仕様(「INBOX.Sent」など)がわかっている場合は、すべてのIMAPで機能します。フォルダ。 (必要に応じて、ISPがこれらの詳細を提供するのに役立ちます。)
「必要な最大メッセージサイズ」(例:「メッセージがこのサイズより大きい場合は、このサイズより小さくなるまで添付ファイルを削除してください。」)と「許可される部分サイズ」(例:「個々のメッセージ部分がこのサイズより小さい場合)を指定することができます。
次の MIME タイプは部分除去候補と見なされます。
Anything with Content-Disposition "attachment"
Content-Type image/*
Content-Type audio/*
Content-Type video/*
Content-Type music/*
Content-Type x-music/*
Content-Type application/*
さまざまな電子メールプロバイダで厳格なテストを受けていませんが、私はうまくいきます。詳細な利用履歴はホームページをご覧ください。
答え3
これを達成するために、ThunderbirdおよびAttachmentExractorプラグインを使用できます。 Thunderbirdにメールアカウントを追加してAttachmentExtractorを起動します。電子メールに添付ファイル名を保持しながら、添付ファイルの内容を削除できます。
答え4
サーバーから添付ファイルを削除するのは非常に簡単です。添付ファイルは単なる(テキスト)ファイルです。 - 添付ファイルを含む電子メールの配布(通常はより大きな電子メール):
find -P /home/*/mail/*/*/* -mindepth 1 -maxdepth 1 -name "*=*" -size +2M -mtime '+367'
メールディレクトリを持つWHMサーバーで100%動作し、mboxではテストされていません。
- ファイルを介したループ
if grep -e '------=_' ${file};
#文字列が含まれています...- 次の一般的な基準に従ってメールを分割します。
csplit --prefix=split4mail2clean. -z ${file} /commonstring/
- 分割された文字列ファイルで割り当て/検索、添付ファイルにはいくつかの一般的な文字列が含まれています。その部分を削除してください。
- 残りの一時分割ファイル(通常の添付ファイルがないファイル)を逆順に結合して元の電子メールを再構成します。
- 修正タイムスタンプの再適用
- 必要に応じて、ここで他の作業を実行してください。
成功するには、3、4つ以上のIF条件が必要な場合があります。ファイルにこの文字列が含まれている場合は、削除してください...一時フォルダから推奨シェルスクリプトを実行し、サイズを変更し、その他の検索条件を適用します。はい、約40,000個のメールファイルに対してテストされたジョブスクリプトがあり、指定された検索および削除基準内に添付ファイルがゼロ残ります。