[Perl] Pop3 모듈로 gmail의 메일 및 첨부파일 가져와서 처리 Develop Tip

얼마전 필요에 의해 Pop3 메일을 처리하는 Perl 모듈을 살펴보았다.
역시 Perl 답게 필요 모듈을 다 있었는데 첨부 파일을 따로 저장하고
하는 등의 일을 하는데 있어 MIME 파싱 등이 필요함을 알게되었다.
또한 아직 해결하지 못한것은 Subject에 들어가는 한글 문제인데,
base64 decodeing을 하여 해당 code page (euc-kr, cp949 등)로
변환을 시켜야 한다.

각설하고, 우분투에서는 다음과 같은 라이브러리를 추가한다.

# apt-get install libmail-pop3client-perl libmail-mboxparser-perl libio-socket-ssl-perl

그 다음 perl 스크립트에 다음의 subroutine을 추가한다.

use Mail::POP3Client;
use MIME::Parser;
########################################################################
# pop3_get
########################################################################
sub pop3_get {
    my($ce)=@_;
    my $pop = new Mail::POP3Client(
                        USER      => $ce->{user},
                        PASSWORD => $ce->{pass},
                        HOST      => $ce->{host},
                        PORT      => $ce->{port},
                        USESSL    => ($ce->{is_ssl}==1) ? 'true' : 'false',
    );
    my($popCount)=$pop->Count();
    if ($popCount<0) {
        cqlib::err("pop3_get:".$pop->Message());
    }
    ## for HeadAndBodyToFile() to use
    my $fh = new IO::Handle();

    ## Initialize stuff for MIME::Parser;
    my($nowStr)=`date +%y%m%d_%H%M%S`; chop($nowStr);
    my $outputdir = "$mailget_root/pop3_$nowStr";
    system("mkdir -p $outputdir");
    my $parser = new MIME::Parser;
    $parser->output_under($outputdir);

    my $i=0;
    ## process all messages in pop3 inbox

    cqlib::info("pop3_get:POP3 에 저장된 메일 개수 : $popCount");
    for ($i = 0; $i < $popCount; $i++) {
        my($popmsg)="$outputdir/pop3.msg.$i";
        open (MAILOUT, ">$popmsg");
        $fh->fdopen( fileno( MAILOUT ), "w" );
        ## write current msg to file
        $pop->HeadAndBodyToFile( $fh, $i+1 );
        close MAILOUT;
        ## MIME::Parser handles only one msg at-a-time
        open (MAILIN, "<$popmsg");
        ## flush all attachments this msg to ./mimemail dir using internal filename
        my $entity = $parser->read(\*MAILIN);
        close MAILIN;
    }
    $pop->Close();
    return $i;
}

$ce는 접속 필요정보를 담고 있는 Hash reference 이다.

예를 들어,
$ce->{user}='googleuser';
$ce->{pass}='password';
$ce->{host}='pop.gmail.com';
$ce->{port}=995;
$ce->{is_ssl}=1;

와 같이 주면 googleuser@gmail.com 이라는 계정의
pop3 메일로 가져올 수 있게 된다.
물론 해당 메일의 설정에서 POP3로 가져올 수 있도록 허용해 놓아야 한다.


덧글

댓글 입력 영역

구글애드텍스트