IMAPする (module)Mail-IMAPClient

back
Mail::IMAPClient を使って、IMAP サーバへアクセス


use Mail::IMAPClient;

my $serv = "IMAPサーバの指定";
my $user = "ログインユーザ名の指定";
my $pass = "ログインパスワードの指定";
my $auth = "認証の種類 ("CRAM-MD5"とか"PLAIN"とか)";

# ログイン(コンストラクタ)
my $o_imap = Mail::IMAPClient->new(
                                   Server        => $serv,
                                   User          => $user,
                                   Password      => $pass,
                                   Authmechanism => $auth,
                                  ) or die "Cannot connect to server: $@";

while (1) {
  # 確実に disconnect できるようにループにしておく

  # ディレクトリリストの取得
  my @sub_folders = $o_imap->subscribed or warn "could not get subscribed folders: $@\n";
  foreach (@sub_folders) {
    print $_, "\n";
  }

  my $dir = "サブディレクトリの指定";
  # ディレクトリの移動
  unless ($o_imap->exists($dir)) {
    # ディレクトリが存在しない場合
    print "could not found $dir: $@\n";
    last
  }
  unless ($o_imap->select($dir)) {
    # ディレクトリへ移動できない場合
    print "could not select $dir: $@\n";
    last;
  }

  my @uid;
  # (指定ディレクトリの)サマリ(UIDリスト)の取得
  @uid = $o_imap->search("ALL");
  # 未読のみのリスト取得
  @uid = $o_imap->unseen;
  # 既読のみのリスト取得
  @uid = $o_imap->seen;
  foreach (@uid) {
    print $_, "\n";
  }

  # メッセージの取得
  my $uid = "@uid からどれか選ぶ";
  my $data;
  unless ($data = $o_imap->message_string($uid)) {
    print "could not fetch $uid: $@\n";
    last;
  }
  print $data, "\n";

  # 既読フラグの付与
  unless ($o_imap->set_flag("seen", @uid)) {
    # または
    # $o_imap->see(@uid);
    print "could not set flag: $@\n";
    last;
  }

  last;
}

# ログアウト
$o_imap->disconnect;

back