• 締切済み

アウトルックにて、条件にあったメールの件名だけ抽出する

教えてください。 タイトルどおりなのですが、 アウトルックにて、メールの振り分け設定をした後、 特定フォルダにあるメールの、「件名」だけを 抽出することは出来ないでしょうか? 保存されるファイルは、csvやエクセルファイルが 望ましいのですが… 方法をご存知の方教えてください。 なお、予算の都合上、出来るだけお金の かからない方法でお願いします。

みんなの回答

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.2

スクリプトがかなり文字化けしていましたので、再送します。 #!Perl # PRINT_SUBJECT.pl (Print Subject) use constant MAIL => 'mailer.example.com'; # メールサーバー use constant USER => 'guci-ok@example.com'; # ログインアカウント use constant PASS => 'guci-ng'; # パスワード use constant FOLD => 'INBOX/test1'; # 受信トレイ下のフォルダ名 use strict; use Net::IMAP::Simple; use MIME::Base64; use Encode qw/from_to/; #=========================================================== # Exchangeサーバーに接続... #=========================================================== print "Net::IMAP::Simple is Version ", Net::IMAP::Simple->VERSION, "\n"; print 'Exchangeサーバーに接続... ', "\n"; my $imap = Net::IMAP::Simple->new(MAIL, port => 143, timeout => 10) or die "Connection error: $Net::IMAP::Simple::errstr\n"; print "Exchange server Connected.\n"; print 'Exchangeにログイン...', "\n"; my $msgs; if ($imap->login(USER, PASS)) { print "login OK\n"; $msgs = $imap->select(FOLD) or # フォルダのメール数を確認 do { print "Error select sgitrouble: $Net::IMAP::Simple::errstr\n"; my @boxes = $imap->mailboxes; print "\@boxes: \n", join("\n" => @boxes); exit; }; print "Messages in ", FOLD, ": $msgs\n"; } else { print "login failed: ", $imap->errstr; exit; } #=========================================================== # メール読込み #=========================================================== print 'メール読込み...', "\n"; for my $msg (1..$msgs) { my $fh = $imap->getfh($msg); unless ($fh) { print "Error get fh on msgno: $msg\n"; next; } # 題名を抽出 my $subject = '(題名なし)'; my $code = "?"; while (<$fh>) { s{[\r\n]}{}g; if (m|^Subject: (.+)$|) { $subject = $1; # 複数行の題名に対応(次行の先頭がタブなら・・・) while (1) { my $next_sub = <$fh>; $next_sub =~ s{[\r\n]}{}g; last unless $next_sub =~ m{^\t(.+)$}; $subject .= $1; } # BASE64でデコード $subject =~ s{\=\?iso-2022-jp\?B\?([^?]+)\?\=} {jis2sjis(decode_base64($1))}iegxms; $subject =~ s{\=\?shift_jis\?B\?([^?]+)\?\=} {decode_base64($1)}iegxms; last; } } print "$subject\n"; } #=========================================================== # 処理完了 #=========================================================== $imap->quit; #=========================================================== # JIS ===> SJIS #=========================================================== sub jis2sjis { my $str = shift; from_to($str,"jis","shiftjis"); $str; } __END__ C:\>PRINT_SUBJECT.pl Net::IMAP::Simple is Version 1.14 Exchangeサーバーに接続... Exchange server Connected. Exchangeにログイン... login OK Messages in INBOX/test1: 4 メール読込み... (題名なし) (題名なし) 在室人数の表示修正 【再送】簡単アンケートでポイント 【トラックに関するアンケート】1

  • guci-ok
  • ベストアンサー率33% (49/146)
回答No.1

一般向けではないですが、何かの参考になればと。 私の知る限りでは、特定フォルダのメールの題名一覧を表示する機能は、 なさそうです。(ファイル出力という点で) 題名だけでなく、送信元や本文の中身を解析して、条件によって自分の携帯電話 にメールで通知したり、プログラムに自動で返信させたり、とユーザーの要望は 際限がありません。このような動作をスクリプトで書いてOutlookにプラグインと して組み込めると良いのですが、そうはなっていないようです。 以下のスクリプトは、IMAPプロトコルでメールサーバーに接続して、 受信トレイ下のフォルダ(半角英数字に限る)のメールの題名一覧を表示する ものです。(どうしても日本語のフォルダを指定したければ、IMAP用に エンコードした文字列を指定して下さい。:IMAPUTF7) このスクリプトはSJIS環境を想定しています。 メール処理は複雑で難しいですが、私の環境では、これで問題なく動作します。 Perlが動作し、Net::IMAP::Simpleモジュールがインストールされていれば、 どのOSでも動きます。メールクライアントは不要。 (Net::IMAP::Simpleは、ppmで簡単にインストールできます) #!Perl # PRINT_SUBJECT.pl (Print Subject) use constant MAIL => 'mailer.example.com'; # メールサーバー use constant USER => 'guci-ok@example.com'; # ログインアカウント use constant PASS => 'guci-ng'; # パスワード use constant FOLD => 'INBOX/test1'; # 受信トレイ下のフォルダ名 use strict; use Net::IMAP::Simple; use MIME::Base64; use Encode qw/from_to/; #=========================================================== # Exchangeサーバーに接続... #=========================================================== print "Net::IMAP::Simple is Version ", Net::IMAP::Simple->VERSION, "?n"; print 'Exchangeサーバーに接続... ', "?n"; my $imap = Net::IMAP::Simple->new(MAIL, port => 143, timeout => 10) or die "Connection error: $Net::IMAP::Simple::errstr?n"; print "Exchange server Connected.?n"; print 'Exchangeにログイン...', "?n"; my $msgs; if ($imap->login(USER, PASS)) { print "login OK?n"; $msgs = $imap->select(FOLD) or # フォルダのメール数を確認 do { print "Error select sgitrouble: $Net::IMAP::Simple::errstr?n"; my @boxes = $imap->mailboxes; print "?@boxes: ?n", join("?n" => @boxes); exit; }; print "Messages in ", FOLD, ": $msgs?n"; } else { print "login failed: ", $imap->errstr; exit; } #=========================================================== # メール読込み #=========================================================== print 'メール読込み...', "?n"; for my $msg (1..$msgs) { my $fh = $imap->getfh($msg); unless ($fh) { print "Error get fh on msgno: $msg?n"; next; } # 題名を抽出 my $subject = '(題名なし)'; my $code = "?"; while (<$fh>) { s{[?r?n]}{}g; if (m|^Subject: (.+)$|) { $subject = $1; # 複数行の題名に対応(次行の先頭がタブなら・・・) while (1) { my $next_sub = <$fh>; $next_sub =? s{[?r?n]}{}g; last unless $next_sub =? m{^?t(.+)$}; $subject .= $1; } # BASE64でデコード $subject =? s{?=??iso-2022-jp??B??([^?]+)???=} {jis2sjis(decode_base64($1))}iegxms; $subject =? s{?=??shift_jis??B??([^?]+)???=} {decode_base64($1)}iegxms; last; } } print "$subject?n"; } #=========================================================== # 処理完了 #=========================================================== $imap->quit; #=========================================================== # JIS ===> SJIS #=========================================================== sub jis2sjis { my $str = shift; from_to($str,"jis","shiftjis"); $str; } __END__ C:?>PRINT_SUBJECT.pl Net::IMAP::Simple is Version 1.14 Exchangeサーバーに接続... Exchange server Connected. Exchangeにログイン... login OK Messages in INBOX/test1: 4 メール読込み... (題名なし) (題名なし) 在室人数の表示修正 【再送】簡単アンケートでポイント 【トラックに関するアンケート】1

関連するQ&A