しかし、ある従業員が非常にプライベートな量のメッセージを別の従業員に送信するのではなく、ホールディング全体に送信する場合...
猫の下で、これがどのように実装されているかの説明。
ネットワークを調べてみたところ、古いメールを削除するための小さなスクリプトが記述されているサイトに出くわしました。それは悪くありませんが、サブフォルダーの文字を削除するのには適していませんでした。
彼はメインタスクに近づいたときに問題を解決しました。
最初に、このzmmailbox(強力で包括的なアシスタント)が私たちを助けるために、夕方の詳細を含む手紙が入ることができるすべてのフォルダーを見つける必要があります。 入力してください:
/opt/zimbra/bin/zmmailbox -z -m user@corp.org gaf # gaf - getAllFolders
応答として、次のものを取得します。
Id View Unread Msg Count Path ---------- ---- ---------- ---------- ---------- 1 unkn 0 0 / 16 docu 0 15 /Briefcase 10 appo 0 52 /Calendar 14 mess 0 1564 /Chats 7 cont 0 7 /Contacts 6 mess 0 56 /Drafts 13 cont 0 179 /Emailed Contacts 2 mess 0 5352 /Inbox 65450 mess 0 12433 /Inbox/ 1.04.2015 31907 mess 0 3125 /Inbox/ 5993 mess 0 881 /Inbox/ 4 mess 0 0 /Junk 5 mess 0 7527 /Sent 15 task 0 8 /Tasks 3 unkn 0 0 /Trash 1770 mess 7 7 /Trash/. (support@corp.org:703) 3741 docu 0 1 / 87195 docu 0 1 / 1015 docu 0 12 / 663 cont 0 1 / 290 task 0 2 / 1100 mess 4404 22301 /. - (support@corp.org:2)
ご覧のとおり、私たちはすべてに満ちています。 [表示]列には目が事前に開かれており、フォルダーの種類があることがわかります。 メッセージフォルダーが必要です-これは混乱です。 必要なものがわかっているので、リクエストをフィルタリングできます。
/opt/zimbra/bin/zmmailbox -z -m user@corp.org gaf | grep mess
クエリ出力:
Id View Unread Msg Count Path ---------- ---- ---------- ---------- ---------- 14 mess 0 1564 /Chats 6 mess 0 56 /Drafts 2 mess 0 5352 /Inbox 65450 mess 0 12433 /Inbox/ 1.04.2015 31907 mess 0 3125 /Inbox/ 5993 mess 0 881 /Inbox/ 4 mess 0 0 /Junk 5 mess 0 7527 /Sent 1770 mess 7 7 /Trash/. (support@corp.org:703) 1100 mess 4404 22301 /. - (support@corp.org:2)
ご覧のとおり、さらに必要なリストを取得していますが、 1100の混乱4404 22301 / Tech。 サポート-受信ボックス(support@corp.org:2) -これは別のメールボックスの共有フォルダーであるため、個別にチェックされます。 もう1つ例外を追加して、不要なものすべてをすぐに削除します:型、シリアル番号、スラッシュ(フォルダー名)まですべてを削除します。
/opt/zimbra/bin/zmmailbox -z -m user@corp.org gaf | grep mess | cut -d"/" -f 2- | grep -v "@corp.org"
目的のリストを取得します。
チャット
工芸品
受信トレイ
受信トレイ/ 2015年4月4日まで
受信トレイ/マーケティング
受信トレイ/ユーレカ
ジャンク
送信済み
小さくてまれな利便性のために、コマンドの出力をファイルにリダイレクトすると、スクリプトは既にファイルからフォルダーの名前を取得します。 そのため、最も難しいのはフォルダーを調べることではなく、名前にスペースまたは特殊文字が含まれているフォルダーを調べることです。
コンソールに入力する場合:
/opt/zimbra/bin/zmmailbox -z -m user@corp.org s -l 300 in:Inbox/ | grep `date -d '-5 day' +%m/%d/%y` | grep "" | sed -e "s/^\s\s*//" | sed -e "s/\s\s*/ /g"
5日前の手紙のトピックを表示します。 date -d '-5 day' +%m /%d /%yの代わりに、ロールバックする必要がある日数に応じて、すぐに01/27/16 形式で日付を書き込むか、 -5を別の値に変更できます。
ただし、次を入力した場合:
/opt/zimbra/bin/zmmailbox -z -m user@corp.org s -l 300 in:Inbox/ | grep `date -d '-5 day' +%m/%d/%y` | grep "" | sed -e "s/^\s\s*//" | sed -e "s/\s\s*/ /g"
そのエラーは落ちます:
ERROR: mail.NO_SUCH_FOLDER (no such folder path: /Inbox/\)
そして、引用符、アポストロフィ、スクリーンで自分自身を囲むこともできます-それは役に立ちません。
それから 、彼らは私が質問への答えを見つけたウィキを指し示しました。
問題を解決するには、特定のブロックにスペースを含むフォルダーの名前を入力します。 「\」はブロックタグです。
/opt/zimbra/bin/zmmailbox -z -m user@corp.org s -l 300 in:"\"Inbox/ "\"
コンソールでこれを実行すると、必要な結果が得られましたが、私のタスクはすべてをスクリプト化することでした。 そして、私のスクリプトでは、フォルダーの名前を含む変数がファイルからデータを取得しました。
/opt/zimbra/bin/zmmailbox -z -m user@corp.org gaf | grep mess | cut -d"/" -f 2- | grep -v "@corp.org" > /tmp/messfolder.list
そして、コードに変数を挿入するとき:
/opt/zimbra/bin/zmmailbox -z -m $is -l 300 in:"\"$p"\" | grep `date -d '-5 day' +%m/%d/%y` | grep "" | sed -e "s/^\s\s*//" | sed -e "s/\s\s*/ /g" |
私はまったく同じエラーを受け取りました:
ERROR: mail.NO_SUCH_FOLDER (no such folder path: /Inbox/\)
ただし、変数は必要なブロックタグに配置されます。 もう少し検索した後、IFSフィールド区切り変数につまずいたことを
ここに説明付きのスクリプト全体があります
#!/bin/bash DOMAIN_NAME="corp.org" # EMAIL=/tmp/email.list # MESID=/tmp/mesid.list # ID DELTEXT='' # IFS=$'\n' # before="$(date +%s)" # t=0 # , /opt/zimbra/bin/zmprov -l gaa $DOMAIN_NAME | sort > $EMAIL # # for i in $(cat $EMAIL); do echo $i # , , , - , , mess /opt/zimbra/bin/zmmailbox -z -m $i gaf | grep mess | cut -d"/" -f 2- | grep -v "@corp.org" > /tmp/messfolder.list # , id . . for p in $(cat /tmp/messfolder.list); do echo $p # : grep , grep , grep , sed' cut , . /opt/zimbra/bin/zmmailbox -z -m $is -l 300 in:"\"$p"\" | grep `date -d '-5 day' +%m/%d/%y` | grep "$DELTEXT" | sed -e "s/^\s\s*//" | sed -e "s/\s\s*/ /g" | cut -d" " -f2 > $MESID # - . cat $MESID count=`grep '' $MESID -c` let t=$t+$count for a in $(cat $MESID | grep ^- | sed s/-//g ) do /opt/zimbra/bin/zmmailbox -z -m $i deleteMessage $a done for a in $(cat $MESID | sed /-/d) do /opt/zimbra/bin/zmmailbox -z -m $i deleteConversation $a done echo -n > $MESID RES=$? if [ "$RES" == "0" ]; then echo "[Ok]"; else echo "[Err]"; fi done echo " : "$t done after="$(date +%s)" elapsed="$(expr $after - $before)" hours=$(($elapsed / 3600)) elapsed=$(($elapsed - $hours * 3600)) minutes=$(($elapsed / 60)) seconds=$(($elapsed - $minutes * 60)) echo " : $hours $minutes $seconds " echo " : "$t" "
もちろん、スクリプトはさらに改善できます。不要なフォルダーを削除し、日付と件名を事前に入力してください。しかし、これはそれほど重要ではありません。 このスクリプトは、自家製のウェブベースの管理パネルに掛けられており、削除するすべての日付とトピックを入力します。すべてがより便利です。
誰かがこれは不必要であると考えており、そのようなスクリプトは不必要ですが、実践が示しているように、彼は少なくとも10人と数人のボスを救いました。 彼らは気分が良く、管理者も気分が良くなった後、気分が良くなりました。
このスクリプトにはマイナスが1つあります。時間です。 このスクリプトは、700ユーザーのすべてのフォルダーを4時間で実行します。 これまでのところ、どこで時間を購入できるかを特定していませんが、教えてくれたり、エラーを指摘したりしていただければ幸いです。
読んでコメントしてくれてありがとう。