問題タブ [smtpd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python:本番メール受信用のsmtpd(または代替)?
私は電子メールのさまざまな処理を行いたいと思っています - 例えば。ヘッダーを検査し、それらがいくつかの基準 (スパムのように見える) を満たしている場合は、接続をドロップするか、受信者リストを検査して特別なフィルタリングを実行します。
Python の smtpd ライブラリは、受信した電子メールを処理するための素晴らしくシンプルなインターフェイスを提供しているようです。
完全に処理される前にメッセージを処理するには (たとえば、ヘッダーがスパムのように見える場合にメッセージをドロップするため)、handle_connect を使用する必要がありますか? 内部 API (process_message 以外) はどこかに文書化されていますか? サンプルコードはどこにありますか?
また、本番環境で smtpd を使用した人はいますか? 信頼性などについて何か考えはありますか?
Twisted について: 私は何度か Twisted を取り入れようとしましたが、据え置き型モデルがとても気に入りましたが、現在の好みには少し複雑すぎます。もう一度見てみますが、今のところ、Twisted 以外の実装に興味があります。
java - Java アプリケーションが受信メールを受信する最も簡単な方法は何ですか?
commons-email でメールを送信するのは簡単ですが、spring ではさらに簡単です。受信メールの受信についてはどうですか? メールのバウンス、添付ファイルの処理などを可能にする使いやすい API はありますか?
python - Python MTA (メール転送エージェント) はありますか
Python MTAがあるかどうか疑問に思っています。smtpdを見てみましたが、それらはすべて機能のないフォワーダーのように見えます。
python - Python smtpdライブラリにSMTPAUTHサポートを追加します...メソッドをオーバーライドできませんか?
そこで、Python smtpd SMTPServerクラスを拡張して、SMTPAUTH接続を処理できるようにしたいと思いました。簡単そうに見えた...
だから、私はこのように始めることができるように見えました:
しかし、何らかの理由で、それは決して呼び出されません。Python smtpdライブラリは、次のような他の同様のメソッドを呼び出します。
なぜ私のメソッドを呼び出さないのですか?
その後、found_terminator(self):メソッド全体をオーバーライドできると思いましたが、それも機能していないようです。
私は愚かなことをしているのですか...?たぶん、今日はまだ完全に目覚めていません...
python - Python 非同期コアとプレーンな古い C
私は2つの異なるプロジェクトのストレステストを行っています.1つはproxsmtpd - Cで書かれたsmtpプロキシで、もう1つはasyncoreとsmtpd pythonモジュールを使用して1時間以内に開発したsmtp_proxy.pyです。
負荷が高い状態で両方のプロジェクトを強調したところ、proxsmtpd は 1 秒あたり 400 の smtp セッションを保持できるのに対し、私の python プログラムは 1 秒あたり 160 の smtp セッションしか実行できないことがわかりました。
それで、私の質問は、非同期コアにいくつかのパフォーマンス制限があるためですか、それとも C プログラムの方が速いだけですか? それとも、非効率的な方法で非同期コアを使用している私ですか?
email - 電子メールのバウンス通知を解析する方法
バウンスした電子メールを解析するには、どのようなオプションが必要ですか? 電子メール サーバーからバウンス通知を受け取りましたが、どうすればよいかわかりません。
python - Python smtpdモジュールでメール送受信
Python smtpdモジュールを使用して単純な smtp サーバーを作成しようとしています。メールを受信して印刷できます。電子メールの送信者に、Hello World メッセージを含む電子メールを返信しようとすると、無限ループに陥ります。自分のサーバーを使用して電子メールを送信しようとしましたが、受信した別の電子メールとして解釈されます。
これを使用して電子メールを送受信するにはどうすればよいですか?
注: この例では、実際の電子メール アドレスを使用していません。注2:メールサーバーとしては使用していません。簡単なサービスで簡単なメールを送受信したい。
python - サーバーの推奨事項 (smtp)
私は現在、非常に小さなプロジェクトに取り組んでいます。私は smtpd.py に基づいて作業していますが、ゆっくりとまったく異なるものに向かっています。
これはsmtpサーバーです。現在、メールを受信し、中継することができます。それはかなり簡単ですが、私は自分自身にいくつかの質問をするところまで来ました。
smtpd.py は asyncore と asychat を使用します。問題は、非同期 API を使用する単一プロセスであることです。すべてが機能し、問題なくさらに進むことができます。
問題は、サーバーがポート 25 にバインドされている場合、ルート uid の下にある必要があることです。ここに大きな問題があります。smtp サーバーの背後にあるアイデアは、Python を使用して多くのことを実装できるということです。ローカル ユーザー、データベース、または任意のデータ ストアにアクセスできるようにしたいと考えています。ハッシュまたは現在 Python でサポートされているものから、または必要に応じてサポートを追加することもできます。
問題は、ルートユーザーを使用してこのすべての制御を行うことは非常に安全ではないと感じていることです...誰かが何かを実行して、ルートpythonシェルでうまくいくとしたらどうでしょう...
そのため、最初はスレッドを作成し、os.setuid を使用してそれらに別の uid を設定したかったのですが、機能していないようであるか、危険でもある可能性があります。
私の 2 番目のアイデア: 接続を受け入れてからフォークし、uid を変更します。フォークされたプロセスからソケットを読み書きできるはずで、すべて問題ありません。
3 番目のアイデアは、メッセージを処理するローカル サーバーにすべてのメッセージを中継するプロキシ サーバーを用意することでした。唯一の問題は、私の smtp サーバーを使用することになっていない誰かが、実際には何にもアクセスできない単なるプロキシであるため、プロキシが認証または何もできないことです。
フォークが最も興味深いソリューションだと思います。
あるいは、まだ考えていないことがあるかもしれません。
とりあえずありがとう
- 編集 -
root でプロセスを開始し、ソケットが作成されると、os.setuid を使用して別のユーザーに切り替えることができるようです。移植性はあまり高くないと思いますが、今のところ大きな問題ではありません。Pyramid/Pylons/Paste のコードを検索した後、私はついにそれを見つけました! SocketServerモジュール。おそらく、ForkingMixIn または ThredingMixIn のいずれかを使用する予定です。スレッドの量などを定義することが可能です。
いずれにせよ、なぜ私が postfix、exim、または qmail を使用していないのか不思議に思っている人のために.. それは非常に簡単です。私は本当に smtp サーバーを作っているわけではありません。メールの受信、受信者または送信者の受け入れまたは拒否など、最低限必要なもののみを実装する場合、smtp プロトコルは非常に単純です。最初の「.」をエスケープします。RFC では、データは "\r\n.\r\n" で終わると記載されているためです。
私が見ているように、Python は積み木に似ています。アイデアは、smtp サーバーを作成することではなく (ESMTP を確実に実装します)、独自のサーバーを構築するための「フレームワーク」を作成することです。私が抱えている問題は、私が一人だとは信じていません。誰かが構成ファイルと postfix を構成する方法を設計しました。ハードコードされており、すべてのケースに適合するわけではありません。すべてのケースに適合するサーバーを作成することもうまくいきません。それはおそらく巨大で醜いものになるでしょう。アイデアは、サーバーに必要なパーツを簡単に追加できるようにすることです。データベースを使用する場合は、既存のモジュールで必要なデータベースを使用してください。クエリを実行し、結果を送り返します。
すべてのドメイン、特定のドメイン、さらにはユーザー名に適用されるルールを本当に定義したい場合は、それが可能になるはずです。
たとえば、私はユースケースを見ます。本当に奇妙なものですが、それでも。1 台のサーバーのみを使用して、postfix でそのようなセットアップをセットアップするのはどれほど簡単でしょうか。あなたは3つのドメインを持っています。a.com、b.com、c.com。
a.com は、受信したすべてのメールを maildir と b.com に同じユーザー名で送信します。b.com は、受信したすべてのメールを maildir と c.com に同じユーザー名で送信します。c.com は、受信したすべてのメールを maildir と a.com に同じユーザー名で送信します。
すでに送信したメールを受け入れるドメインはありません。
言い換えると
ここでの考え方は、メールは複数のドメインに複製されますが、その所有者には戻らないということです。そのようなユースケースは非常に単純なはずです。しかし、すべてのドメインがメールを別の場所に保存する場合や、2 回のバウンスごとにメールを保存したい場合はどうでしょう。
python - PythonSMTPDライブラリオーバーライドバージョン
誰かがこのSMTPサーバーに接続したときに、自分のメッセージを送信したいと思います。
しかし、私はまだ応答を得ています:
Pythonでウェルカムメッセージを上書きして「TESTEMAILSERVER」を表示するにはどうすればよいですか?
postfix-mta - Postfix リレーホストの設定
/etc/postfix/main.cf で次のようにリレー ホストを使用するために postfix を構成しようとしています。
telnet localhost 25
Postfixログを介して電子メールを送信した後、次のように表示されます:
SMTP サーバー (リレーホスト) ログ:
修正方法はありますか?
OS: Ubuntu.