web-dev-qa-db-ja.com

すべての受信メールをスクリプトにリダイレクトする

メール配信についてはわかりません。

しかしすべての受信メール(*@mydomain.com)をphpスクリプトにリダイレクトする必要があります。

私はDebianを使用しています

これを行うための単純なメールサーバーは存在しますか? (exim、接尾辞などなし)

すべてのメールリクエストをリダイレクトするだけです。

exim、接尾辞などがないとこれが不可能な場合、どうすればよいですか?

ありがとう!

5
felix46r

「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は、ルーターがチェックインされる順序を設定するために、ルーターディレクトリ内のファイルに番号を付けます。最初に一致したルーターが電子メールの処理に使用されます。ここでの私の構成から、エイリアスの後、hubusersprocmailなどのローカルユーザーを処理するルーターの前に、450前後の番号を付けたいと思うでしょう。

これらのファイルをトランスポートディレクトリとルーターディレクトリに追加した後、update-exim4.confを実行して、Eximが実際に読み取る構成ファイルをDebianに作成させる必要があります。

6
DerfK

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 [〜#〜] の答えに従うことができます。

1
John Siu

Postfixを使用して@yourdomaincatchallアカウントをホストし、スクリプトにcatchallアカウントメールボックスをスクリプトのベースとして使用させます。もう1つのオプションは、 this guy と同様のことを行うことですが、ディレクトリから読み取るのではなく、メールをパイプで送りたい場合に限ります。

1
NickW

POP3または(できれば)IMAPサーバーをセットアップする必要があります。次に、通常どおりそこにメールボックスを作成します。 適切なPHP関数 を使用してメールクライアントをシミュレートし、定期的にメールボックスをポーリングして新しいメッセージを探します。

1
jamieb

私がこれまでに見た中で最も簡単な解決策(追加のソフトウェアなし)は、IMAP PHP拡張機能を使用して(IMAPで)メールボックスにアクセスすることです。

現在のIMAP拡張機能のドキュメントに関する情報はここにあります: http://php.net/manual/en/ref.imap.php

次に、目的の期間にスクリプトを実行するようにcrontabを構成するだけです。

0
Raul Cardoso

ハイパーメールでこのようなことができることは知っていますが、それはPerlで書かれています。 PHPの実装についてはよくわかりません。

0
Matt

何をしたいのか正しく理解できていませんが、好みのメールサーバーを使用してメールを受信し、PHPスクリプトでメールボックスを自動的に解析する(CRONを使用)ようにしてみませんか?おそらく)新しいメールを探し、必要なデータを選択し、不要になった場合はメールを削除しますか?

0
laurent

私は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/virtualnewaliases、およびservice postfix reloadを実行して、すべての新しい構成を完成させます。また、必ずchmod +x PHPスクリプトを作成し、上部にPHPハッシュバンを付けてください。

0
D. Strout