4

私の PHP スキルは中級ですが、これを実装してみたいと思います。

地元のジャズミュージシャン向けのサイトを持っています。今後のギグをプロフィール ページに追加できるようにしてほしいです。オンラインの Todo リストにタスクを追加できるように、これらの更新を電子メールで送信できるようにしたいと考えています。

そのため、サーバー上のアカウントに届いたメールを解析する必要があります。

標準フォーマットを強制するのは公平だと思います。.そして私は考えていました

(In subject)NEWGIG   [[or maybe set up a separate "newgig@mySite.com" email account for gig updates only]]

TITLE>My next super gig<TITLE
DATE>03/10/2012<DATE
DESC>Here is some supplementary information<DESC
LINK>www.hereIsTheVenue.com<LINK

ギグが追加され、確認メールが送信されます。

これを行うのはどれほど難しいですか?出来ますか?私はすべてのテスト解析や SQL などを実行できると思います..しかし、私はメールの経験があまりなく、気を付けなければならない「厄介な部分」がたくさんあるようです。

開始する前に、これが実行可能であることを確認できますか? 注意点やコツは?

ところで - 私はそれを非常に使いやすくしたいので、私は電子メールパーサーをやっています. ミュージシャンは怠け者であることが知られているので、彼らが電子メール (通常は確認を取得する場所) からすぐにギグを投稿できるようにすることができれば、サイトにアクセスしたり、ログインしたり、自分のアカウントにアクセスしたりする手間を省くことができます。

4

3 に答える 3

7

はい、可能です。必要なのは、smtp エンドポイントを使用してサーバーにアクセスすることだけです。postfix や exim など、受信メールをリッスンするもの。からの入力を処理できるスクリプトまたはプログラムに、受信メールをプレーンテキストとして渡すように、このソフトウェアを構成する必要がありますstdin

最も簡単な方法は、スクリプトを指す新しい電子メール エイリアスを作成することです。私の/etc/aliasesファイルには、次のようなエントリがたくさんあります。

userpart: "|/usr/bin/php -f /path/to/some/script.php"

これは、電子メールがこのアドレスに到着するたびにトリガーされます。userpart@this.server.example

スクリプト自体はこのように入力を読み取ります

$fp = fopen('php://stdin','r');
    while (!feof($fp)) {
            $input .= fgets($fp);
    }
fclose($fp);

入力は最新の MUA が考えられるものであれば何でもよいため、既存の MIME パーサーを使用すると便利な場合があります。

于 2012-09-20T13:21:32.110 に答える
2

メールの解析は、あらゆる種類のデータの解析と同じです。メールの共通フォーマットを定義するだけです。

パーサーを作成したら、php imap 関数を使用して定期的にメール サービスに接続し、メールを読み取り、解析して db に挿入するスクリプトを作成します。

しかし、すべてのギグ データを追加する Web フォームを作成する方が簡単で迅速です。

于 2012-09-20T13:20:04.893 に答える
1

これを行うには、正規表現を使用できます。ただし、フォーマットを改善する必要があります。

フォーマットに、ユーザーが入力してフォーマットを破棄できる文字が含まれていないことを確認してください。ユーザー/クライアントにとって非常にシンプルにしたい場合は、XML形式を使用してください。ユーザーが編集しやすくなります。

例は次のとおりです:(私はTITLEを取得する方法を作成し、開始タグと終了タグを変更します)これで二重中括弧が使用されます。

$str= '
(In subject)NEWGIG   [[or maybe set up a separate "newgig@mySite.com" email account for gig 
updates only]]
{{TITLE}}My next super gig{{TITLE}}
DATE>03/10/2012<DATE
DESC>Here is some supplementary information<DESC
LINK>www.hereIsTheVenue.com<LINK';
preg_match('#{{TITLE}}(?P<title>.+){{TITLE}}#', $str, $matches);
echo $matches['title'];

XML形式(simplexml_load_string関数を使用してXML形式を解析できます):

<document>
<TITLE>My next super gig</TITLE>
<DATE>03/10/2012</DATE>
<DESC>Here is some supplementary information</DESC>
<LINK>www.hereIsTheVenue.com</LINK>
</document>
于 2012-09-20T14:11:05.540 に答える