2013年1月5日土曜日

[Perl]メール

POP3Client
インストール
ppm> install Mail-POP3Client
使い方
use strict;
use utf8;
use Mail::POP3Client;

# pop3
my $server = 'localhost';
my $username = 'user';
my $password = 'pass';

my $pop = new Mail::POP3Client(USER => $username,
                               PASSWORD => $password,
                               HOST => $server,
                               DEBUG => 0);
print "Success to connect $server.\n";

if ($pop->Count() < 1) {
 print "No message\n";
 $pop->Close();
 exit;
}
print $pop->Count() . " messages\n";

my ($head, $body, $subject, $i);
for ($i = 1; $i <= $pop->Count(); $i++) {
 foreach $head ($pop->Head($i)) {
  print $head . "\n";
 }
 foreach $body ($pop->Body($i)) {
  print $body . "\n";
 }

 # 受信メールをサーバから削除
 $pop->Delete($i);
}

# log off
$pop->Close();
MIME::Entity
インストール
ppm> install MIME-Entity
Net::SMTP
使い方
use strict;
use utf8;
use Net::SMTP;
use MIME::Entity;

my ($smtp, $mime, $subject, $body, $from, $to);
$from = 'csrcdev0';
$to = 'csrcdev0';
$subject = "Test mail";
$body = "Hello, This is test mail.";

$smtp = Net::SMTP->new('localhost');
$smtp->mail($from);
$smtp->to($to);

$smtp->data();
$mime = MIME::Entity->build(From     => $from,
                            To       => $to,
                            Subject  => $subject,
                            Type     => 'text/plain; charset="utf-8"',
                            Data     => $body,
                            Encoding => '7bit');
$smtp->datasend($mime->stringify);
$smtp->dataend();

$smtp->quit;

# 事前に作成したメールファイルを送信する
my ($text);
$smtp = Net::SMTP->new('localhost');
$smtp->mail($from);
$smtp->to($to);

open(FILE, "test.mail");
$smtp->data();
foreach $text () {
 $smtp->datasend($text);
# print $text;
}
$smtp->dataend();
$smtp->quit;
close(FILE);
Gmail からメールを受信する
Mail::POP3Client の SSL モードを使用して受信する
use strict;
use Mail::POP3Client;
 
# pop3s
my $server = 'pop.gmail.com';
my $username = 'your account';
my $password = 'your password';
my $port = '995';
 
my $pops = new Mail::POP3Client( USER => $username,
                              PASSWORD => $password,
                              HOST => $server,
                              PORT => $port,
                              USESSL => 'true',
         DEBUG => 0);
print "Success to connect $server.\n";
 
if ($pops->Count() < 1) {
 print "No message\n";
 $pops->Close();
 exit;
}
 
print $pops->Count(), " messages\n";
 
# log off
$pops->Close();
受信したメールを MIME decode して表示する
Encode モジュールでメールヘッダ部は decode('MIME-Header', ...) を使用し、メール本文は decode('iso-2022-jp', ...) を使うことで decode できる。
use utf8;
use Encode;
binmode STDOUT, ":encoding(shift-jis)";
 
my $head, my $body, my $subject;
for (my $i = 1; $i <= $pops->Count(); $i++) {
    foreach $head ($pops->Head($i)) {
 if ($head =~ /^(Subject):\s/) {
     $subject = $head;
     $subject = decode('MIME-Header', $subject);
     print $subject . "\n";
 }
 print "[$i]" . $head . "\n";
    }
    print "----------------------------\n";
 
    foreach $body ($pops->Body($i)) {
 $body = decode('iso-2022-jp', $body);
 print $body . "\n";
    }
    print "============================\n";
}
受信メールをファイルに保存する
Mail::POP3Client のファイル書き出し機能を使用して受信メールをローカルファイルに保存する。
use Mail::POP3Client;

my $filename = $ARGV[0];
for (my $i = 1; $i <= $pops->Count(); $i++) {
    my $fh = IO::File->new();
    $fh->open("$filename", "w");
    $pops->HeadAndBodyToFile($fh, $i);
    $fh->close();
}
メールフォーマットの日時表記を変換する
DateTime::Format::Mail モジュールを使用してメールヘッダの日時フォーマットを好みの形に変換する。
use strict;
use DateTime::Format::Mail;

my $datetime = DateTime::Format::Mail->parse_datetime("Sun, 29 Mar 2009 13:08:44 +0900");
print $datetime->ymd('.') . "\n";
print $datetime->ymd('') . '-' . $datetime->hms('') . "\n";

0 件のコメント:

コメントを投稿