メールアドレスを抜き出すって出来ますかNo.14919
おゆき さん 03/10/11 21:11
 
おおはらと申します。鶴亀メールには大変お世話になっています。
助けて頂きたいことがありまして投稿しました。

受信フォルダ以下にある全てのメールヘッダからメールアドレスだけを
抜き出したいのですが当然こんな機能はありません。私マクロと言うのがまったく判
らず、自分ではどうすることも出来ず相談させて頂いた次第です。
マクロ集を見ましたがこの様なマクロは見当たりませんでしたので
もしよければどなたか助けてほしいと思いまして・・

もし面倒でしたらせめてこのマクロのいい参考書があれば紹介頂きたいと思っており
ます。(自分でもチャレンジはしてみます)
よろしくお願いいたします。

おおはら

[ ]
RE:14919 メールアドレスを抜き出すって出No.14920
L.ダヴィンチ さん 03/10/11 21:51
 

2003/10/11(土) 21:35:04

こんにちは、おゆきさん

ダヴィンチ@ユーザーです。

マクロで対応するとして・・・
もう少し詳しい仕様を伺わせて下さい。

/*
** タイトル:『hidesoft.8:14919| メールアドレスを抜き出すって出来ます
か?』
** 発信日:2003年10月11日(土)
** 発信者:おゆきさん
*/
>おおはらと申します。鶴亀メールには大変お世話になっています。
>助けて頂きたいことがありまして投稿しました。
>
>受信フォルダ以下にある全てのメールヘッダからメールアドレスだけを
>抜き出したいのですが当然こんな機能はありません。私マクロと言うのが
>まったく判

●どのメールヘッダのアドレスを抜き出したいですか?
1)From:
2)Cc:
3)To: (これはないと思いますが・・・多分自分だけでしょうから)
4)それ以外?(Reply-To:など)

●抜き出すメールアドレスの形式はどのようにしましょう。
例)From: ダヴィンチ<xxxxxxx@poipoi.ne.jp> を前提

1)xxxxxxx@poipoi.ne.jp
2)ダヴィンチ<xxxxxxx@poipoi.ne.jp>

●抜き出した後の利用目的は以下のような事だと思います。

1)自分宛てに届いたメールの送り主メールアドレス一覧表を作り、
    通常のテキストやExcelのCSV形式のファイルを作成したい。

2)受信メールのアドレス一覧を元にアドレス帳に登録するため

いずれも一覧をテキストファイルへの出力になります。
ただ単に画面で見るためではないと思いますが・・・

ご回答お待ちしております。

P.S.
※)秀まるおさんへ
    鶴亀本体側にメール一覧のCSV出力機能があってもよさげな
    気がしますが。

>らず、自分ではどうすることも出来ず相談させて頂いた次第です。
>マクロ集を見ましたがこの様なマクロは見当たりませんでしたので
>もしよければどなたか助けてほしいと思いまして・・
>
>もし面倒でしたらせめてこのマクロのいい参考書があれば紹介頂きたいと
>思っており
>ます。(自分でもチャレンジはしてみます)
>よろしくお願いいたします。
>
>おおはら

--
メーラー: TuruKame 3.07beta6
OS: Windows98 SE

[ ]
RE:14919 メールアドレスを抜き出すって出No.14921
秀まるお2 さん 03/10/11 22:45
 
 鶴亀のマクロを使うよりも、秀丸のGrepを使ったほうが手っ取り早いかもしま
せん。正規表現についての知識があれば、かなりのことができると思います。

 秀丸のgrepで、

 検索する文字列:   ^From:
 検索するファイル: 対象フォルダ\*.txt
 正規表現:  ON

 で検索すれば、From:ヘッダの一覧が抜き出せます。それからさらに、置換コ
マンドで、

 検索:   ^From: *
 置換:   (空の文字列指定)
 正規表現: ON

 で全置換すれば、From:ヘッダの中身だけの一覧ができます。

 さらに、

 検索:   \n
 置換:   ,
 正規表現: ON

 で全置換すれば、From:ヘッダの内容をコンマで区切った長大な宛先が完成し
ます。

 この作戦はどうでしょ?

 鶴亀メールはメールデータを生テキストで保存してるので、生テキストについ
ての加工テクニックを身につけてしまえば、非常に快適かと思います。マクロの
ようなプログラミングテクニックが無くてもかなりのことはできると思います。

[ ]
RE:14920 メールアドレスを抜き出すって出No.14922
秀まるお2 さん 03/10/11 22:49
 
>※)秀まるおさんへ
>    鶴亀本体側にメール一覧のCSV出力機能があってもよさげな
>    気がしますが。

 実は、鶴亀メール内部にはCSVエクスポート機能が内蔵されていますが、特定
の提携メールソフト(Pro.メール)でのみ有効な作りになってます。Pro.メール
の販売元との契約上、CSVエクスポートの機能を鶴亀メールで標準搭載させるこ
とはできません。

 Pro.メールを買っていただくという手があるにはあります。基本的にこのソフ
トは鶴亀メールにプラスアルファの機能を搭載したソフトで、鶴亀メールの機能
は全部付いてます。

    http://www.promail.jp/

[ ]
RE:14921 メールアドレスを抜き出すって出No.14928
秀まるお2 さん 03/10/11 23:59
 
 コメントした後、酒飲んで寝ようかと思ったんですが、コメント内容が間違っ
てることに気づいて寝られなくなってしまいました。

> 検索:   ^From: *
> 置換:   (空の文字列指定)
> 正規表現: ON

 grep結果にはファイル名が入るので、これではだめでした。

 そもそもメールアドレスだけを拾うなら、From:ヘッダのgrep結果から、

 検索:  [a-zA-Z0-9_.]+@[a-zA-Z0-9_.]+
 置換:  (現在のファイル)

 の正規表現にてもう一度grepをかけて、さらに、行番号を除去するために、

 検索:     ^\([0-9]+\):
 置換:     (空の文字列指定)
 正規表現: ON

 で全置換します。そうすると、今度こそメールアドレスの一覧が出てきます。

 さらに、ここから重複したメールアドレスを1つだけに統合しないいけないで
す。これはさすがにマクロを使わないと難しいです。自分で考えたマクロは以下
の通りです。

-------重複したメールアドレスを除去するマクロの例--------
    gofiletop;
Loop:
    #y = y;
    $s = gettext( 0, y, 256, y );
    if( $s != "" ) {
        while(1) {
            searchdown $s;
            if( !result ) break;
            if( gettext( 0, y, 256, y ) == $s ) {
                deleteline;
               up;
                golineend;
            }
        }
    }
    moveto 0, #y;
    down;
    if( result ) goto Loop;
---------------------------------------------------------

[ ]
RE:14921 メールアドレスを抜き出すって出No.14929
L.ダヴィンチ さん 03/10/12 00:43
 

2003/10/12(日) 00:35:02

こんにちは、秀まるお2さん

ダヴィンチ@ユーザーです。

/*
** タイトル:『hidesoft.8:14921| RE 14919 メールアドレスを抜き出すって出
来ますか?』
** 発信日:2003年10月11日(土)
** 発信者:秀まるお2さん
*/
> 鶴亀のマクロを使うよりも、秀丸のGrepを使ったほうが手っ取り早いか
>もしま
>せん。正規表現についての知識があれば、かなりのことができると思いま
>す。
>
> 秀丸のgrepで、
>
> 検索する文字列:   ^From:
> 検索するファイル: 対象フォルダ\*.txt
> 正規表現:  ON
>
> で検索すれば、From:ヘッダの一覧が抜き出せます。それからさらに、
>置換コ
>マンドで、

と言われましても、動作のイメージが分かりません。
受信フォルダーをエクスプローラーでオープンして
秀丸エディタを起動する事が前提でしょうか?

その前に「秀丸のgrep」ってなんでしょうか?
秀丸エディタのメニューコマンドですか?
単体のバッチコマンドでしょうか?????

それにこの件の発信元のおおはらさんが秀丸をインストールされて
いるかどうかは私には不明ですが、確認されていますか?

前提条件や動作環境、操作手順をもっと分かりやすく
説明して欲しいものです。

--
メーラー: TuruKame 3.07beta6
OS: Windows98 SE

[ ]
RE:14920 メールアドレスを抜き出すって出No.14930
おゆき さん 03/10/12 03:33
 
おおはらです。

>
>2003/10/11(土) 21:35:04
>
>こんにちは、おゆきさん
>
>ダヴィンチ@ユーザーです。
>
>マクロで対応するとして・・・
>もう少し詳しい仕様を伺わせて下さい。

そうですよね。恐る恐る投稿したのでこんな基本的なことを
忘れていました。私的にはアドレスと宛先名が対になって
抜き出せれば100%の出来でした。ただアドレスだけでも
OKです。

[ ]
RE:14928 メールアドレスを抜き出すって出No.14931
おゆき さん 03/10/12 04:02
 
おおはらです。
>
>> 検索:   ^From: *
>> 置換:   (空の文字列指定)
>> 正規表現: ON
>
> grep結果にはファイル名が入るので、これではだめでした。

入りました。(^-^)こっち読めばよかった。
>
> そもそもメールアドレスだけを拾うなら、From:ヘッダのgrep結果から、
>
> 検索:  [a-zA-Z0-9_.]+@[a-zA-Z0-9_.]+
> 置換:  (現在のファイル)

この現在のファイルと言うのがわからないです。今秀丸DLして
試したもので・・鶴亀のみのユーザーなんです。

また検索のこれらの表現はなんていう言語なのでしょう。
重複アドレスなどエクセルなどで「重複セルは無視する」などの
コマンドでやっていましたが非常に遅いです。(5万件ほどで10分以上かかります)
かなり興味持ってしまいました。

出来ればこの検索機能を付けた鶴亀がほしいです(笑)

>
> の正規表現にてもう一度grepをかけて、さらに、行番号を除去するために、
>
> 検索:     ^\([0-9]+\):
> 置換:     (空の文字列指定)
> 正規表現: ON
>
> で全置換します。そうすると、今度こそメールアドレスの一覧が出てきます。
>
> さらに、ここから重複したメールアドレスを1つだけに統合しないいけないで
>す。これはさすがにマクロを使わないと難しいです。自分で考えたマクロは以下
>の通りです。
>
>-------重複したメールアドレスを除去するマクロの例--------
>    gofiletop;
>Loop:
>    #y = y;
>    $s = gettext( 0, y, 256, y );
>    if( $s != "" ) {
>        while(1) {
>            searchdown $s;
>            if( !result ) break;
>            if( gettext( 0, y, 256, y ) == $s ) {
>                deleteline;
>               up;
>                golineend;
>            }
>        }
>    }
>    moveto 0, #y;
>    down;
>    if( result ) goto Loop;
>---------------------------------------------------------

[ ]
RE:14931 メールアドレスを抜き出すって出No.14932
おゆき さん 03/10/12 04:03
 
中途半端に引用残してしまいました。すみません。

[ ]
RE:14931 メールアドレスを抜き出すって出No.14933
山紫水明 さん 03/10/12 09:22
 
 おゆきさん,ダヴィンチさん,こんにちは。
 横から失礼します。

》この現在のファイルと言うのがわからないです。今秀丸DLして
》試したもので・・鶴亀のみのユーザーなんです。

 秀丸がなくてもマクロは使えますので,後掲のマクロではどうでしょう。

     では, (^^)/~
                                        山紫水明

//-------------------------------------------------------------//
newfile;
disabledraw;
gofiletop;
beginsel;
gofileend;
delete;
loaddll "tkinfo.dll";
#n = dllfunc("SwitchHeaderView", 0);
$folder = dllfuncstr( "CurrentAccount" ) + "\\受信";
grep "^(From:|Cc:)", "*.txt", $folder, regular;
replaceallfast "^.+(From|Cc): *", "",regular;
replaceallfast ", *", "\n",regular;

//以下,秀まるおさん作
    gofiletop;
Loop:
    #y = y;
    $s = gettext( 0, y, 256, y );
    if( $s != "" ) {
        while(1) {
            searchdown $s;
            if( !result ) break;
            if( gettext( 0, y, 256, y ) == $s ) {
                deleteline;
               up;
                golineend;
            }
        }
    }
    moveto 0, #y;
    down;
    if( result ) goto Loop;
endmacro;
//-------------------------------------------------------------//


[ ]
RE:14930 メールアドレスを抜き出すって出No.14935
L.ダヴィンチ さん 03/10/12 17:46
 

2003/10/12(日) 17:39:21

こんにちは、おゆきさん

ダヴィンチ@ユーザーです。

既に山紫水明さんの素晴らしいマクロのご提案が
ありましたので私の出るマクロ(幕)はありませんが。

ご参考になれば幸いです。
ちょっと長いですが・・・

出力形式は、CSVファイル形式で新規メール画面に出力します。
アカウント名
From,Cc,To

重複行は秀まるおさんのマクロで削除しています。

/*
** タイトル:『hidesoft.8:14930| RE 14920 メールアドレスを抜き出すって出
来ますか?』
** 発信日:2003年10月12日(日)
** 発信者:おゆきさん
*/
>そうですよね。恐る恐る投稿したのでこんな基本的なことを
>忘れていました。私的にはアドレスと宛先名が対になって
>抜き出せれば100%の出来でした。ただアドレスだけでも
>OKです。

--マクロ
// 鶴亀メール用マクロモジュールのDLLをロード
loaddll "TKInfo.dll";
{
// 本体で起動されているか?
    if( dllfunc( "IsTuruKameMain") != 1 ) {
        message "本マクロは、鶴亀メール本体画面から起動して下さい。";
        endmacro;
    }

// メインウィンドハンドル
    ##main = dllfunc( "MainWnd" );

// 現在選択されているフォルダ直下の全メールを
// 選択状態にします。
    #n = sendmessage( hidemaruhandle(0), 0x0111, 40008, 0);
    #n = dllfunc("LockSelection");

   
// 出力メールをオープン
    newfile;
    disabledraw;
    gofiletop;
    beginsel;
    gofileend;
    delete;
    #n = dllfunc("SwitchHeaderView", 0);
    #orikaeshi = dllfunc( "IsOrikaeshi" );
    if ( #orikaeshi == 1 ) {
        #n = dllfunc( "SwitchOrikaeshi" );
    }

// 該当メールのアドレス抽出→新規メールに出力
    call GetHeader ##main;

// -------重複したメールアドレスを除去するマクロの例--------
    gofiletop;
Loop:
    #y = y;
    $s = gettext( 0, y, 256, y );
    if( $s != "" ) {
        while(1) {
            searchdown $s;
            if( !result ) break;
            if( gettext( 0, y, 256, y ) == $s ) {
                deleteline;
               up;
                golineend;
            }
        }
    }
    moveto 0, #y;
    down;
    if( result ) goto Loop;

EXIT_MAIN:

    endmacro;
    freedll;
}

// カレントフォルダの全メールからFrom, Cc, Toの順で
// 新規メールに出力します。
// ##1 = 鶴亀本体ウインドハンドル
GetHeader:
{
    ##main = ##1;
    $$header[0] = "From";
    $$header[1] = "Cc";
    $$header[2] = "To";

// 実行アカウント名とタイトル
    insert dllfuncstr( "CurrentAccount" ) + "\n";
    insert "送り主,同報,宛先\n";
   
    while ( dllfunc("ExecAt", ##main, "EnumSelection", 1) > 0 ) {

        ##ii = 0;
        while ( ##ii < 3 ) {
            call GetHeaderString $$header[##ii], ##main;
            $$s = $$return;
           
            insert $$s;
            if ( ##ii < 2 ) {
                insert ",";
            }
            else {
                insert "\n";
            }
            ##ii = ##ii + 1;
        }
    }
    ##n = dllfunc( "ExecAt", ##main, "UnlockSelection", 0 );

    return;
}

// $$1 = ヘッダー名
// ##2 = メインウィンドハンドル
GetHeaderString:
{
    $$header = $$1;
    ##main = ##2;
    $$headerString = "";
    $$s = dllfuncstr("ExecAt", ##main, "CurrentHeader", $$header );

    ##jj = 0;
    while ( 1 ) {

        $$subs = dllfuncstr("GetEmailList", $$s, ##jj );
        if ( $$subs == "" ) {
            break;
        }

        $$subs = dllfuncstr("SetEmailOnly" , $$subs );

        if ( ##jj > 0 ) {
            $$headerString = $$headerString + "," + $$subs;
        }
        else {
            $$headerString = $$subs;
        }
        ##jj = ##jj + 1;
    }

    return "\"" + $$headerString + "\"";
}

--

--
メーラー: TuruKame 3.07beta6
OS: Windows98 SE

[ ]
RE:14929 メールアドレスを抜き出すって出No.14940
秀まるお2 さん 03/10/12 21:30
 
 ダヴィンチさんにそういうつっこみをされてもはたしてどういう反応をすれば
いいのか分かりませんが、僕は僕なりに自分のソフトのサポート業務を自分の責
任でやってたつもりです。

 最初から「マクロうんぬん…」という話だったので、それなりに(正規表現な
どについて)詳しいユーザー様のはずかと思いまして、少なくとも秀丸をインス
トールすらしてないとはまったく想像しませんでした。実際その想像は外れてた
ので間違った想像だった訳ですが…。

 下手にマクロの説明をするよりは検索の仕方を説明した方が最終的に解決に至
る可能性が高いんじゃないかという予想もありまして…。

 とにかく以後気を付けます。&、なんだかんだで常連ユーザー様にいろいろ手
伝っていただきましてありがとうございます。

[ ]
RE:14931 メールアドレスを抜き出すって出No.14941
秀まるお2 さん 03/10/12 22:20
 
 一応、僕が鶴亀メールの作者なので僕がコメントしますが…

 結論から言って、僕のコメントは無視していただき、山紫水明さんやダヴィン
チさんの作成されたマクロ類を活用していたたくのが一番いいんじゃないかと思
います。

> この現在のファイルと言うのがわからないです。今秀丸DLして
> 試したもので・・鶴亀のみのユーザーなんです。

 秀丸エディタに限らずですが、大抵のテキストエディタ類には、「grep」と呼
ばれる検索機能がありまして、これはつまり、複数のファイルから特定の文字列
を検索して、そのヒットした位置(ファイル名+行番号)をリストアップする機
能です。

 秀丸エディタの場合には、grepの時の検索対象ファイルに「現在のファイル」
というのが指定できまして…。もし、この辺ことについて詳しく知る必要があり
ましたら、秀丸エディタのその辺の(grep関係の)ヘルプなどを参照して欲しい
です。

> また検索のこれらの表現はなんていう言語なのでしょう。

 正規表現とか、Regular Expressionなどと言う物です。正規表現を使うと、特
定の規則に沿った文字列を検索することが出来まして、場合によっては大変便利
です。

 正規表現そのものについて、詳しいことは鶴亀メールのヘルプには何も書いて
ありません。秀丸エディタのヘルプには多少書いてあります。

 もっと詳しく知りたい場合は、例えば「正規表現 入門」などのキーワードを
使ってホームページの検索などすれば、いろいろ出てくると思います。

 (話がすっかりそれましたが)

[ ]
RE:14940 メールアドレスを抜き出すって出No.14947
L.ダヴィンチ さん 03/10/13 09:08
 

2003/10/13(月) 09:04:37

こんにちは、秀まるお2さん

ダヴィンチ@ユーザーです。

ご回答ありがとうございました。
今後とも宜しくお願いします。

/*
** タイトル:『hidesoft.8:14940| RE 14929 メールアドレスを抜き出すって出
来ますか?』
** 発信日:2003年10月12日(日)
** 発信者:秀まるお2さん
*/
> ダヴィンチさんにそういうつっこみをされてもはたしてどういう反応を
>すれば
>いいのか分かりませんが、僕は僕なりに自分のソフトのサポート業務を自
>分の責
>任でやってたつもりです。
>
> 最初から「マクロうんぬん…」という話だったので、それなりに(正規
>表現な
>どについて)詳しいユーザー様のはずかと思いまして、少なくとも秀丸を
>インス
>トールすらしてないとはまったく想像しませんでした。実際その想像は外
>れてた
>ので間違った想像だった訳ですが…。
>
> 下手にマクロの説明をするよりは検索の仕方を説明した方が最終的に解
>決に至
>る可能性が高いんじゃないかという予想もありまして…。
>
> とにかく以後気を付けます。&、なんだかんだで常連ユーザー様にいろ
>いろ手
>伝っていただきましてありがとうございます。

--
メーラー: TuruKame 3.07beta6
OS: Windows98 SE

[ ]
RE:14947 メールアドレスを抜き出すって出No.14981
おゆき さん 03/10/15 22:24
 
おおはらです。

たくさんの意見をありがとうございました。しばらく仕事が遅く時間を作れなかった
ものですから
皆さんのマクロはこれから試してみます。

私いろいろなニュースやメーリングリストなど溜め込むだけ溜め込んで
3万通を超えております。検索して一覧作成しか使ったこと無かったのですが
これらのやり方を持ってすればメールでなく本文の中の一行を検索して
出力することが出来るんですね。
とても便利なことを覚えました。ありがとうございます。

しばらくフォーラム眺めてみようかと思います。
また新たな発見があるでしょうから。

[ ]
RE:14981 メールアドレスを抜き出すって出No.14983
山紫水明 さん 03/10/15 23:24
 
 山紫水明です。

 アドレスを抜き出したものから,アドレス帳に登録されていないものを抜き出
し,されにアドレス帳に登録するマクロを作ってみました。
 「マクロ作者のための会議室(鶴亀メール関連)」に投稿しておきますので,
興味のある方はご覧ください。

     では, (^^)/~
                                        山紫水明

[ ]