PHPスクリプトを実行して受信メールを解析できるLinuxメールクライアント

PHPスクリプトを実行して受信メールを解析できるLinuxメールクライアント

単純なテキストベースのメールクライアントを使用してPHPスクリプトを実行して、ユーザーから受信したメールを解析できますか?

ユーザーに電子メールを送信するPHPアプリケーションがありますが、アプリケーションがユーザーの応答を解析してデータベースに保存できる場合は良いでしょう。

私はCentos 6とPostfix、PHPを使用し、PHPMailerを使用して電子メールを送信します。 X Windowsシステムがインストールされていません。

答え1

あなたの質問は、テキストベースのメールクライアントとPHPアプリケーションを参照してから、「アプリケーション」(PHPアプリケーションなど)が電子メール(または電子メールから抽出したデータ)をデータベースの途中に保存するように指定するため、少し混乱しています。

応答処理アプリケーションから転送アプリケーションを分離することができ、おそらく分離する必要があります。応答処理は、procmailからスクリプトを呼び出して実行できます。これは、ユーザーのホームディレクトリに次の内容を含む.procmailrcファイルを受け取る必要があるためです。

:0
* ^Subject:.*[response-email]
| /path/to/your_script

このメールアドレスに送信されたすべてのメッセージを処理するには、件名を省略するか、他の選択基準を使用できます。

私はyour_scriptあなたの材料をデータベースに直接置くことができるコマンドラインメールクライアントを知りません。とにかく応答をテストする必要があるので(追加のデータベースフィールドを抽出したくない場合は、少なくともスパムを捨てるために)your_scriptPHPで書くことをお勧めします。ポリエチレングリコールその内容を解析してデータベースに保存します。 (もちろん、これに慣れている他の言語を使用することもできます。)

このスクリプトを実行しているシステムから電子メールを受信するためにpostfixを使用している場合は、/etc/postfix/main.cfを呼び出す必要がありますprocmail

mailbox_command = procmail -a "$EXTENSION"

答え2

...わかりました。いくつかのステップに戻り、電子メールが内部的にどのように機能するかについていくつか説明します。コメントの質問で判断した場合は、この質問の問題の一部がどのように機能するかを理解してください。これは最終的にあなたが望むことを達成するために何をすべきかについて誤解を招く可能性があります。

まず、いくつかの基本用語は次のとおりです。

  • MUA(メールユーザーエージェント)は「メールクライアント」と呼ぶものです。その目的は、ユーザーが電子メールを送信したり、メールボックスから電子メールを検索して読むことを可能にすることです。技術的には、PHPスクリプトは電子メールを送信するときにMUAとして機能します。
  • MTA(メール転送エージェント)は、単に電子メールをある場所から別の場所に移動します。最近では、受信した電子メールが本物であることを確認することも含まれます。しなければならないその前に通過しますが、現在の範囲を超えています。郵便局のように考えてみてください。
  • MDA(メッセージ配信エージェント)はパイプラインのエンドポイントとして機能します。 MTAが特定の電子メールメッセージをローカルに配信する必要があると判断した場合は、MDAを呼び出してトランザクションを処理します。

電子メールを送信すると、次のことが発生します。

  1. MUAは、スクリプトまたはユーザー入力を介して電子メールを生成し、国際標準に従って正しくカプセル化されていることを確認し(正しい場所にアドレスを書き、適切な量のスタンプを追加するのと同じ)、設定されたMTAに転送します。ほぼすべてのUNIXバリアント本物小さな組み込みシステムはローカルMTAを実行するため、電子メールを送信する必要があるすべての操作はSMTPを使用せずに実行できます。
  2. MTAは電子メールを受信し、それが正しいことを確認します。しなければならないメッセージを処理するには、宛先アドレスを表示してそれをどのように処理するかを決定します。ローカルで処理する意図がない場合は、その特定のメッセージを送信するのに適した場所であると判断された別のMTAにメッセージを転送します。
  3. 実際の設定に応じて、手順2を複数回繰り返すことができます。たとえば、ローカルコンピュータ - >送信メール用のISPのスマートホストを送信 - > ISPのウイルス対策/スパムフィルタを受信 - > ISPのデフォルトの受信メールサーバーです。
  4. 最終的に設定が正しいと仮定すると、ステップ3のループがMTAで終了します。これにより、MTA は電子メールをローカルに転送できるか、送信者にメッセージを受け入れないことを正式に通知できます。
  5. 最後のMTAは、指定されたMDAに電子メールを配信した後、実際の配信を処理します。これは通常これは、受信者のメールボックスに配置することによって行われますが、ほとんどすべてのアイテムで構成できます。

あなたが要求するのはステップ5ですでに完了しています。あなたが望むのは、特定の電子メールアドレスの配信ルールを設定し、それを人が読めるようにメールボックスに転送するのではなく、電子メールをローカルプログラムにパイプすることです。特定のPHPスクリプトである必要はありません。どのPHPスクリプト - 可能な限り)電子メール入力を解析し、それを使用してデータベースのエントリを入力します。

アントンの答えメールサーバーに追加の電子メールアドレスと関連ユーザーを追加できることを前提にパイプラインを設定する最も簡単な方法が説明されています。そうでない場合は、さらにクリエイティブである必要がありますが、あなた、ISP、およびWebサイトのドメイン名間の合意に関する追加情報がない限り、私たちはそれ以上のアドバイスを提供することはできません。

答え3

答え4

私はPHPアプリケーションで解析したいのか、それともサーバーでしか解析しないのかわかりません。どちらのバリエーションもメールクライアントを使用せずに実装できます。

1) Bash/SH または他のスクリプト言語。このような:

#!/bin/bash

MyUSER="SET-MYSQL-USER-NAME"
MyPASS="SET-PASSWORD"
MyHOST="localhost"
MyDB="SET-DB"

for mFile in `grep -iR 'WHAT TO FIND???' .`
do
  # here do something with your e-mail z.B:
  mysql -u $MyUSER -h $MyHOST -p$MyPASS MyDB << EOF
      insert into ...
      values ...;
  EOF
done

2)または非常に単純なアプリケーション側(PHPの)パーサーです。このライブラリを見てください。https://github.com/plancake/official-library-php-email-parser

関連情報