Страница 1 из 1

[PERL] расчленить почтовый адрес

Добавлено: 2010-09-07 18:57:44
Alex Keda
ковыряю perl совместно с exim
надо разобрать адрес который содержится в поле

Код: Выделить всё

mail to:
содержаться там может что-то типа

Код: Выделить всё

vasya@domain.su

Код: Выделить всё

"Василий Пупкин" <vasya@domain.su>
или любые комбинации перечисленного через запятую.
собсно - проблем особых нету, но вот думаю - не велосипед ли я изобретаю? может уже модуль какойнить есть?

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-07 19:04:36
hizel
велосипед, посмотри на cpan, Luke

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-07 19:34:33
Alex Keda
http://cpansearch.perl.org/src/RJBS/Ema ... 892/README
нашёл. решило 90% моих проблем сразу
вот тока не могу понять как вычленить этой штукой адрес типа vasya@domain.su из той галиматьи что на входе
(щас уже обкоцал до одного адреса - мне нужен тока этот случай)

Код: Выделить всё

               # get destination address
                my @addresses = Email::Address->parse($dst_addrr);
                #my $addr_spec = $Email::Address::addr_spec;
                $num_mails = scalar @addresses;
                print LOGFILE "num adresses = " . $num_mails . "\n";
                # how many adresses?
                if ( $num_mails eq "1" )
                {
                        # get address
                        $dst_addrr = $addresses[0];
                        #my $host = $address->host;
                        #my $user = $address->user;
                        $dst_addrr =~ $Email::Address::addr_spec;
                        print LOGFILE "found address = " . $dst_addrr . "\n";
некатит. печатает в лог "Василий Пупкин" <vasya@domain.su>

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-07 20:05:45
hizel

Код: Выделить всё

$dst_addrr->address;

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-07 20:11:26
Alex Keda
индейское жилищще

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-07 20:34:51
hizel
хз

Код: Выделить всё

#!/usr/bin/env perl

use Email::Address;
use strict;

my $dst_addr = 'Gans Otto <olo@fuck.com>';
my @address = Email::Address->parse($dst_addr);
print $address[0]->address, "\n";

Код: Выделить всё

>perl tst.pl
olo@fuck.com

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-07 20:56:41
Гость
в двойные кавычки возьми своего ганса отто

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-07 21:04:37
hizel
ну взял и чо

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-07 23:09:17
thefree
а то, что там в двойных кавычках @
===
use Data::Dumper;
print Dumper(@addresses);

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-08 7:12:51
hizel
что сказать то хотел?

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-08 14:07:05
Tuchka
hizel писал(а):что сказать то хотел?
Наверно про интерполяцию переменных хотел сказать. Что массив у тебя будет подставляться. Хотя в чем проблема я пока из обсуждения тоже не уловила :)

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-08 14:15:47
Гость
судя по
hizel писал(а):$dst_addrr->address;
Alex Keda писал(а):индейское жилищще
hizel писал(а):хз
'Gans Otto <olo@fuck.com>';
логично предположить что разница только в кавычках
AlexKeda писал(а):некатит. печатает в лог "Василий Пупкин" <vasya@domain.su>
а работает у лиса или нет он уже не сказал
полагаю что не работает
а пример с кавычками хизель не продемонстрировал

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-08 14:26:16
hizel
пример с кавычками работает, демонстрировать его нет нужды

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-08 15:07:40
Alex Keda
всем сорри, заработало
сказалось моё незнание синтаксиса perl

Код: Выделить всё

mx# vim /tmp/functions.pl
#!/usr/bin/perl -w

# подрубаем мусю /usr/ports/databases/p5-DBD-mysql50
use DBI;
use Email::Address;


# search and return rewritten email address
sub mysql_rewrite {
        my ($search_addr, $dst_addrr) = @_;
                print "$search_addr -> $dst_addrr\n";
                # get destination address
                my @addresses = Email::Address->parse($dst_addrr);
                #my $addr_spec = $Email::Address::addr_spec;
                $num_mails = scalar @addresses;
                print "num adresses = " . $num_mails . "\n";
                # how many adresses?
                if ( $num_mails eq "1" )
                {
                        # get address
                        $dst_addrr = $addresses[0];
                        #$dst_addrr =~ $Email::Address::angle_addr;
                        $dst_addrr = $dst_addrr->address;
                        print "found address = " . $dst_addrr . "\n";
                }

        return  $dst_addrr;

}       # end mysql_rewrite

#sub check

print mysql_rewrite ('petrov@isp.su','"А. Кеда" <akeda@isp.su>') . "\n";

Код: Выделить всё

mx# /tmp/functions.pl
petrov@isp.su -> "А. Кеда" <akeda@isp.su>
num adresses = 1
found address = akeda@isp.su
akeda@isp.su
mx#     

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-08 15:15:28
hizel
так не должно быть, по RFC там должон быть что то типа

Код: Выделить всё

=?windows-1251?B?wuvg5Ojs6PAg1A==?=

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-08 15:30:17
Alex Keda
это адрес внутри exim
он уже расчленил ваш rfc

Re: [PERL] расчленить почтовый адрес

Добавлено: 2010-09-08 15:33:35
hizel
а, ну ок, чо :}