私のラップトップでは、毎週のタスクを実行するためにクローンを設定しました。情報提供があればメールを受け取りたいです。今私はKMailをMUAとして使用していますが、これはMaildirディレクトリからメールを読むことができます~/.local/share/local-mail
。だから私はローカルメールをこのフォルダ(Maildir構造を使って)に転送したいと思います。
sendmail
(echo "$REPORT" | mail -s "$SUBJECT" "$ME"
使用できるように)インターフェースを持つ非常に単純なプログラムがすでに存在していることを願っています。 exim をインストールしたり、リモートメールサーバーにメールを転送したりすることは過度と見なされます。
質問サーバーからすべてのメールを転送する最も簡単な方法は何ですか?宛先がリモート転送のようです。私の要件に合わない(現地配送が必要です)。これ古いGentooスレッドPerlで古いスクリプトを書くようになりました。確かに慎重に計画された非常に単純なプログラムはありますか?
どんな提案がありますか?私はアーチLinuxを使用しています。
答え1
既存のアプレットが見つからなかったので、自分で書くことにしました。最初に私は次のことを思い出しました。
#!/bin/bash
# Simple sendmail
# filename per spec at http://cr.yp.to/proto/maildir.html
rand=$((RANDOM % 1000))
msgname=$(date +%s).P$$R$rand.$(hostname | tr '/:' '\057\072')
# Safety measure: do not overwrite existing mail
set -o noclobber
cat > ~peter/".local/share/local-mail/inbox/new/$msgname"
スクリプトを実行しているユーザーが「peter」でない場合は機能します。このアイデアの後続は「小さな」Cプログラムです。フェムトメール。読むから:
femtomail - Maildirをサポートする最小MDA
femtomailは、ローカルメール用の最小メール配信エージェント(MDA)です。メールは標準入力から受け入れられ、ユーザーのMaildirボックスに保存されます。このソフトウェアはシングルユーザーコンピュータ用に設計されています。
瞬間的な移動、デーモン、送信者の確認などはまだ実装されておらず、複雑さのために実装されていません。 femtomailが書かれた理由は、電子メールソフトウェアがないからではなく、既存のソフトウェアが簡単な作業をするには大きすぎるからでした。ローカルユーザーにcronメールを送信する。
フェムトメールのワークフロー:
- プロセスユーザーとグループを変更します。
- 新しいファイルの作成一意のファイル名メールディレクトリにあります。
Received
ファイルにヘッダーを書き込みます。- 標準入力のデータをファイルに渡します。
- 出口。
ソースコードとインストール手順は、以下で確認できます。https://git.lekensteyn.nl/femtomail/。
答え2
承認された回答に基づいて、公式のDovecot CEリポジトリのDockerイメージを使用して小さなソリューションを作成しました。https://hub.docker.com/r/dovecot/dovecot、共有したい。
コンテナを実行します。
docker run --name dovecot -d dovecot/dovecot
sudoをインストールしてください。鳩の画像には含まれていませんが、スクリプトでは必要です。
apt-get update && apt-get -y install sudo
メールディレクトリを設定します。
/var/mail
ユーザーのホームディレクトリでこれを行う方が柔軟性が高く、面倒ではないと思います。mkdir /var/mail/vmail chown vmail /var/mail/vmail
vmailグループのメンバーである必要があるメールボックスユーザーを作成します。
useradd -g vmail theresa
必要に応じて、いつでもより多くのユーザーを追加できます。
Dovecotにメールがどこにあるか教えてください。これを行うには、
mail_location
次のように変更する必要があります/etc/dovecot/dovecot.conf
。mail_location=maildir:/var/mail/vmail/%u
後でDovecotを再起動する必要があり、Dockerコンテナを再起動するだけです。
docker restart dovecot
/usr/local/storemail.sh
dovecot コンテナに次の bash スクリプトを作成します。#!/bin/bash # Store mail in maildir # Based on https://unix.stackexchange.com/a/82367/215688 # Simply stores an email to the user mail directory USER=$1 MAIL_LOCATION="/var/mail/vmail/$USER" # filename per spec at http://cr.yp.to/proto/maildir.html rand=$((RANDOM % 1000)) msgname=$(date +%s).P$$R$rand.$(hostname | tr '/:' '\057\072') # Just in case the user dir has not been created yet sudo -u vmail mkdir -p "$MAIL_LOCATION/new" # Safety measure: do not overwrite existing mail set -o noclobber # now store the email there sudo -u vmail cat > "$MAIL_LOCATION/new/$msgname"
実行可能にすることを忘れないでください。
chmod +x /usr/local/storemail.sh
それはすべてです。
これで、このスクリプトを使用して新しいメッセージを保存できます。唯一のパラメータはユーザー名と電子メールであり、標準入力で提供する必要があります。
storemail.sh theresa <testmail.eml
または容器の外で使用してください
docker exec -i dovecot <testmail.eml storemail.sh theresa
またはSSHを介したリモートシステムでも可能
ssh docker-machine.local <testmail.eml docker exec -i dovecot storemail.sh theresa
準備手順を自動化するには、カスタムdockerfileを作成することをお勧めします。