femtomail - Maildirをサポートする最小MDA

femtomail - Maildirをサポートする最小MDA

私のラップトップでは、毎週のタスクを実行するためにクローンを設定しました。情報提供があればメールを受け取りたいです。今私はKMailをMUAとして使用していますが、これはMaildirディレクトリからメールを読むことができます~/.local/share/local-mail。だから私はローカルメールをこのフォルダ(Maildir構造を使って)に転送したいと思います。

sendmailecho "$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メールを送信する

フェムトメールのワークフロー:

  1. プロセスユーザーとグループを変更します。
  2. 新しいファイルの作成一意のファイル名メールディレクトリにあります。
  3. Receivedファイルにヘッダーを書き込みます。
  4. 標準入力のデータをファイルに渡します。
  5. 出口。

ソースコードとインストール手順は、以下で確認できます。https://git.lekensteyn.nl/femtomail/

答え2

承認された回答に基づいて、公式のDovecot CEリポジトリのDockerイメージを使用して小さなソリューションを作成しました。https://hub.docker.com/r/dovecot/dovecot、共有したい。

  1. コンテナを実行します。

    docker run --name dovecot -d dovecot/dovecot
    
  2. sudoをインストールしてください。鳩の画像には含まれていませんが、スクリプトでは必要です。

    apt-get update && apt-get -y install sudo
    
  3. メールディレクトリを設定します。/var/mailユーザーのホームディレクトリでこれを行う方が柔軟性が高く、面倒ではないと思います。

     mkdir /var/mail/vmail
     chown vmail /var/mail/vmail  
    
  4. vmailグループのメンバーである必要があるメールボックスユーザーを作成します。

     useradd -g vmail theresa
    

    必要に応じて、いつでもより多くのユーザーを追加できます。

  5. Dovecotにメールがどこにあるか教えてください。これを行うには、mail_location次のように変更する必要があります/etc/dovecot/dovecot.conf

     mail_location=maildir:/var/mail/vmail/%u
    

    後でDovecotを再起動する必要があり、Dockerコンテナを再起動するだけです。

     docker restart dovecot
    
  6. /usr/local/storemail.shdovecot コンテナに次の 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を作成することをお勧めします。

関連情報