メール配信についてはわかりません。
しかしすべての受信メール(*@mydomain.com)をphpスクリプトにリダイレクトする必要があります。
私はDebianを使用しています
これを行うための単純なメールサーバーは存在しますか? (exim、接尾辞などなし)
すべてのメールリクエストをリダイレクトするだけです。
exim、接尾辞などがないとこれが不可能な場合、どうすればよいですか?
ありがとう!
「a PHPスクリプト」」とは、他の場所のWebサーバー上のPHPスクリプト、またはPHPスクリプト)を意味します。コマンドラインでローカルに実行しますか?
次のようなカスタムトランスポートを作成して、exim4とcurlを使用して他のWebサイトにメールを送信しました。
send_to_site:
driver = pipe
command = /usr/bin/curl https://example.com/mail.php --data-urlencode "mail@-"
user = nobody
group = nogroup
return_path_add
delivery_date_add
envelope_to_add
Debianの「分割構成」オプションを使用している場合は、これを含む/etc/exim4/conf.d/transport/
にファイルを作成します。ここでのcommand
は、電子メール全体(ヘッダーと本文)を変数mail.php
の$_REQUEST["mail"]
に渡します。 PHPスクリプトでヘッダーを処理する必要があります。
トランスポートをトリガーするには、受信したいメールに一致するrouter
を設定し、上記のtransport
を使用して送信する必要があります。分割構成では、ルーターは/etc/exim4/conf.d/router/
に入ります。 [〜#〜] all [〜#〜]特定のドメインのメールをキャプチャするために、私はこれをテストしていませんが、これは正しいと思います:
catchall_mail:
driver = accept
domains = mydomain.com
transport = send_to_site
Debianは、ルーターがチェックインされる順序を設定するために、ルーターディレクトリ内のファイルに番号を付けます。最初に一致したルーターが電子メールの処理に使用されます。ここでの私の構成から、エイリアスの後、hubusers
やprocmail
などのローカルユーザーを処理するルーターの前に、450前後の番号を付けたいと思うでしょう。
これらのファイルをトランスポートディレクトリとルーターディレクトリに追加した後、update-exim4.conf
を実行して、Eximが実際に読み取る構成ファイルをDebianに作成させる必要があります。
Postfix、exim4などの完全なSMTPサーバーパッケージを実行したくない場合は、 fakeSMTP ニーズに適合します。以下はウェブサイトからの説明です
fakeSMTPはPHP従来のPostfixSMTPサーバーのように動作するように記述されたスクリプトです。intedと組み合わせて使用すると、メールクライアントがサーバーのポート25に接続したときにスクリプトが呼び出されます。
このスクリプトは実際には電子メールを送信しません(ただし、理論的には、必要に応じてsendmailと組み合わせることができます)。また、認証機能が含まれていないため、不適切に構成されたオープンSMTPリレーとしてのみ機能します。私は、スパマーのためのハニーポットを作成するためだけでなく、概念実証のためにそれを書きました。
fakeSMTP.phpは、提供されているリンクからダウンロードできます。次のように変更/ etc/inetd.conf
_smtp stream tcp nowait root /path/to/fakeSMTP.php
_
基本的に、すべての着信smtp接続はfakeSMTP.phpによって処理されます。スクリプトをfakeSMTP.phpに組み込む必要があります。次の例に基づく
_$hp = new fakeSMTP;
$hp->serverHello = 'axllent.org ESMTP Postfix'; // Server identity (optional)
$hp->logFile = '/tmp/emails.log'); // Log the transaction files (optional)
$hp->receive();
if (!$hp->mail['rawEmail']) exit; // Script failed to receive a complete transaction
/* The script returns all the mail parts which you can process in $hp->mail(array) - read source for all details */
_
スクリプトは、電子メール処理に$hp->mail(array)
を使用する必要があります。
私はコードを見ていませんが、ドメインの電子メールのみを受け入れるようにコードを変更する必要があるかもしれません。
Sirchがコメントで述べているように、このスクリプト/ライブラリにはRBL、アドレスチェック、amavis/spamassassinが組み込まれていないため、大量のスパムメールを受信する可能性があります。それらを独自のスクリプトに組み込む場合は、少し手間がかかるかもしれません。
RBL、amavis/spamassassinの統合にpostfixを使用することにした場合は、 [〜#〜] here [〜#〜] の答えに従うことができます。
Postfixを使用して@yourdomaincatchallアカウントをホストし、スクリプトにcatchallアカウントメールボックスをスクリプトのベースとして使用させます。もう1つのオプションは、 this guy と同様のことを行うことですが、ディレクトリから読み取るのではなく、メールをパイプで送りたい場合に限ります。
POP3または(できれば)IMAPサーバーをセットアップする必要があります。次に、通常どおりそこにメールボックスを作成します。 適切なPHP関数 を使用してメールクライアントをシミュレートし、定期的にメールボックスをポーリングして新しいメッセージを探します。
私がこれまでに見た中で最も簡単な解決策(追加のソフトウェアなし)は、IMAP PHP拡張機能を使用して(IMAPで)メールボックスにアクセスすることです。
現在のIMAP拡張機能のドキュメントに関する情報はここにあります: http://php.net/manual/en/ref.imap.php
次に、目的の期間にスクリプトを実行するようにcrontabを構成するだけです。
ハイパーメールでこのようなことができることは知っていますが、それはPerlで書かれています。 PHPの実装についてはよくわかりません。
何をしたいのか正しく理解できていませんが、好みのメールサーバーを使用してメールを受信し、PHPスクリプトでメールボックスを自動的に解析する(CRONを使用)ようにしてみませんか?おそらく)新しいメールを探し、必要なデータを選択し、不要になった場合はメールを削除しますか?
私はPostfixと仮想エイリアスドメインでそれを行いました。 main.cf
:
virtual_alias_domains = domain.name #Make sure this does _not_ appear in mydestination
virtual_alias_maps = hash:/etc/postfix/virtual
/etc/postfix/virtual
:
@domain.name anything@localhost
/etc/aliases
:
anything: "|/path/to/script.php"
ファイルを編集したら、postmap /etc/postfix/virtual
、newaliases
、およびservice postfix reload
を実行して、すべての新しい構成を完成させます。また、必ずchmod +x
PHPスクリプトを作成し、上部にPHPハッシュバンを付けてください。