2010-12-24 18 views
2

こんにちは 私は電子メールアカウント[IMAP]にログインするための独立したスクリプトを書こうとしていますが、各電子メールのヘッダーを取得し、&サーバーの)IPアドレスを入力します。私はこれがトップ3のウェブメールプロバイダ(Yahoo、Google & Hotmail)と他の一般的なヘッダーフォーマットをカバーするためには少し包括的でなければならないことを認識しています。IMAPメールボックスの電子メールからIPを取得

理想的には、送信者のIPアドレスを取得したいのですが、サーバーのIPアドレスを解決するのが理想的です。

通常のLAMP設定でPHPでこれを行う必要があります。

任意のアイデアが役に立ちます。ありがとうございました。

+1

「それぞれのIPアドレス」とは、具体的にはどういう意味ですか?それは自分自身の仕事です(多くのメールサービスには、元のマシンの動的IPは含まれていません) –

+0

IMAPメールボックスで受信した各電子メールのヘッダーからIPアドレスを探し出して保存したい。 – Abhic

+0

あなたは繰り返していますが、ここで何をしたいのかはまだ分かりません。 IPアドレスは、ネットワーク上のコンピュータ/サーバに割り当てられます。メッセージの送信元のサーバ、メッセージが送信するサーバ(複数の場合があります)、または送信者がメールの作成に使用したコンピュータのIPアドレスのアドレスを「検索して保存」したいですか? –

答えて

4

システムが通過するサーバーの詳細は、電子メールヘッダーの上部に逆の順序で表示されます。最新のものが一番上、最初のサーバーが一番下にあります。

簡単な解決策は、RegExpを使用して、IPアドレスを含む下の「Received:...」行を探し出すことです。

$regExp = '/Received:.*((?:\d+\.){3}\d+)/'; 

がラインに合わせて、IPアドレスを返します。

非常に簡単なテストがあることを示唆しています。

次に、preg_match_all()のようなものを使用して、一致する行の配列を返し、最後のものを使用します。

+0

$ matches [1]では、ipは123.123.123.123から3.123.123.123に変更されていますが、$ matches [0]を使用して$ matches [0]の最後の要素です。 – Andrew

1

そのIPは、送信者IPではなく、郵送したサーバのIPです。サーバーIPまたは送信者IPを使用しますか?

+0

ああ、私はそれを手に入れました。私は送信者のIPアドレスを取得したいが、サーバーのIPアドレスは解決するだろう。 – Abhic

+0

@Abhic:多くの場合、プライベートネットワーク上に多数のPCが存在するため、送信者のIPアドレスは無駄になります。 http://in.wikipedia.org/wiki/Private_networkを参照してください。 –

1

あなたが接続した後は、メッセージのリストを持って、今メッセージをforeachingさ:

$header=imap_fetchheader($imap,$msgn); 
$regex='/client\-ip\=(.+?)\;/s'; 
preg_match_all($regex,$header,$matches); 
$clientip=echo($matches[1]); 

それは私のために風のように動作します。

+0

見栄えは良いですが、ヘッダには "client-ip"タグが含まれていません。 – Andrew

0

この投稿は古いですが、上記の選択された回答はIPを取得しますが、必ずしも正しい送信元IPアドレスを取得するとは限りません。以下は実際の送信サーバーIPを取得するために使用した正規表現です。IP:

/^Received:\sfrom(.*)[\[\(]\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})[\]\)]/im 
関連する問題