1

perl がメールの Received ヘッダー情報を取得し、そのサーバーと IP アドレスを文字列から取得する方法はありますか? 次に例を示します。

Received: from example.web.site.net (example.web.site.net [1.1.1.1])  (using example     filler text (256/256 bits))  (No client certificate requested)  by example.example.com     (Postfix) with ESMTPS id 123456

これら 2 つの項目は、最終的に SQL データベースに送信されるときに、それぞれのフィールドに移動する必要があります。

これも qpsmtp プラグインを使用しています。

4

2 に答える 2

0

私がそれを正しく理解していれば:

  • example.web.site.netはサーバー名です。と
  • 1.1.1.1は IP です

これを行う最善の方法は、正規表現キャプチャを使用することです。Perl は、括弧で囲まれた特定の式に一致する文字列をキャプチャします。文字列を特定の正規表現 (m//) と照合しようとすると、配列が返されます。

これが私のコードです:

use strict;
use warnings;

my $str = "Received: from example.web.site.net (example.web.site.net [1.1.1.1])  (using example     filler text (256/256 bits))  (No client certificate requested)  by example.example.com     (Postfix) with ESMTPS id 123456";

my ($server, $ip) = $str =~ m/\((.+)\[(.+?)\]\)/sg;
chop($server);

print "'$server' - '$ip'";

さて、正規表現を使用して文字列 " (example.web.site.net [1.1.1.1]) "のこの部分に一致させ、キャプチャしたい文字列の部分を括弧で囲みました。そして、2つの文字列を取得したいので、割り当て:

my ($server, $ip) = $str =~ m/\((.+)\[(.+?)\]\)/sg;

それが役立つことを願っています!

于 2013-08-02T07:52:41.633 に答える