メール本文の中からメールアドレス抽出のみを抽出するツールを探しています。


メールソフトのベッキーからエクスポートした、
テキストファイルから数万件のメールアドレスのみを抽出したいと思っています。

機能的にはアットコピア( http://atcopier.com/ )というソフトで解決しそうなのですが
シェアウェアなので、フリーソフトで探しております。

同様の機能を持ったソフリーソフトフトや正規表現などを駆使した方法などを
教えてください。

回答の条件
  • 1人5回まで
  • 登録:2006/05/19 16:19:52
  • 終了:2006/05/22 11:22:45

ベストアンサー

id:llusall No.5

llusall回答回数505ベストアンサー獲得回数612006/05/19 19:02:55

ポイント500pt

再回答ですみません。

前回ものは、結果ファイルが上書きされてしまう為、追加書き込みされるように修正しました。




Option Explicit

Const ADDR_FILE = "D:\KEKKA.TXT" '抽出たアドレスを入れるファイル名

Call Main()

Sub Main()

    Dim objArgs

    Dim i

    Dim nArgCnt

    Dim bRtn

    Dim sPath

    Dim objFS, objTXT, objTXT2, sLine

    Dim reg, Matches, mc, cnt

    Err.Clear

    'コマンドライン引数の有無チェック

    Set objArgs = WScript.Arguments

    nArgCnt = objArgs.Count

    If nArgCnt = 0 Then

        MsgBox "アイコンにファイルをドラッグ&ドロップしてください。", vbExclamation

        Exit Sub

    End If

    Set reg = New RegExp

    reg.Global = True

    reg.Pattern =  "([\w]+)([\w\.-]+)@([\w\-]+)\.([\w\.\-]*)[a-z][a-z]"

    Set objFS   = CreateObject("Scripting.FileSystemObject")

    Set objTXT2 = objFS.OpenTextFile( ADDR_FILE , 8 , True )

    'ファイル数の処理を実行

    cnt = 0

    For i = 0 To nArgCnt -1

        sPath = objArgs(i)

        Set objTXT  = objFS.OpenTextFile( sPath, 1, False )

        Do Until objTXT.AtEndOfStream

            sLine = objTXT.ReadLine

            Set Matches = reg.Execute(sLine)

            For Each mc in Matches

                objTXT2.WriteLine(mc.Value)

                cnt = cnt + 1

            Next

        Loop

        objTXT.Close

        Set objTXT  = Nothing

    Next

    objTXT2.Close

    Set objTXT2 = Nothing

    MsgBox "おしまい。[" & cnt & "]個あった", vbInformation

End Sub

id:atiran

ありがとうございます。

すごいです。理想的な処理です。

これはVBスクリプトになるのでしょうか。

なにを勉強するとこのコードを考える事ができるのでしょうか。

本当にありがとうございました。

2006/05/20 23:55:01

その他の回答(5件)

id:tamo2_xvi No.1

tamo2_xvi回答回数436ベストアンサー獲得回数102006/05/19 16:53:27

ポイント15pt

http://www.vector.co.jp/soft/win95/net/se085324.html?g

このソフトは如何でしょうか?

id:atiran

ありがとうございます。

すこし操作が難しいです。

2006/05/22 11:09:10
id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612006/05/19 17:01:26

ポイント300pt

以下の内容をメモ帳などで[アドレス取得.vbs]などと名前をつけて、デスクトップに配置。

[■抽出たアドレスを入れるファイル名]を修正。

アイコンに、テキストファイルをドラッグ&ドロップしてください。

※まとめてドロップできますが、数万ファイルは、1度にドロップしないでください。

 いくつまで、OKかはわかりません。


'ここから-----------------------------------------------------------------

Option Explicit

Const ADDR_FILE = "D:\KEKKA.TXT" '■抽出たアドレスを入れるファイル名

Call Main()

Sub Main()

    Dim objArgs

    Dim i

    Dim nArgCnt

    Dim bRtn

    Dim sPath

    Dim objFS, objTXT, objTXT2, sLine

    Dim reg, Matches, mc, cnt

    Err.Clear

    'コマンドライン引数の有無チェック

    Set objArgs = WScript.Arguments

    nArgCnt = objArgs.Count

    If nArgCnt = 0 Then

        MsgBox "アイコンにファイルをドラッグ&ドロップしてください。", vbExclamation

        Exit Sub

    End If

    Set reg = New RegExp

    reg.Global = True

    reg.Pattern =  "([\w]+)([\w\.-]+)@([\w\-]+)\.([\w\.\-]*)[a-z][a-z]"

    Set objFS   = CreateObject("Scripting.FileSystemObject")

    Set objTXT2 = objFS.CreateTextFile( ADDR_FILE , True )

    'ファイル数の処理を実行

    cnt = 0

    For i = 0 To nArgCnt -1

        sPath = objArgs(i)

        Set objTXT  = objFS.OpenTextFile( sPath, 1, False )

        Do Until objTXT.AtEndOfStream

            sLine = objTXT.ReadLine

            Set Matches = reg.Execute(sLine)

            For Each mc in Matches

                objTXT2.WriteLine(mc.Value)

                cnt = cnt + 1

            Next

        Loop

        objTXT.Close

        Set objTXT  = Nothing

    Next

    objTXT2.Close

    Set objTXT2 = Nothing

    MsgBox "おしまい。[" & cnt & "]個あった", vbInformation

End Sub

'ここまで-----------------------------------------------------------------

id:atiran

ありがとうございます、上書きの方を利用させていただきます。

2006/05/22 11:09:44
id:ekusutasii No.3

ekusutasii回答回数224ベストアンサー獲得回数02006/05/19 17:01:40

仕事できますね。俺絶対適わない。応援してます。

id:x31 No.4

x31回答回数106ベストアンサー獲得回数12006/05/19 17:06:14

ポイント15pt

外部のサーバーでもよければ以下はいかがでしょうか。

http://www.ahref.org/cgi/mailchu/

http://joho.boo.jp/app-e/eadd.cgi

id:atiran

ありがとうございました。

数万行の処理が難しそうです。

2006/05/22 11:10:46
id:llusall No.5

llusall回答回数505ベストアンサー獲得回数612006/05/19 19:02:55ここでベストアンサー

ポイント500pt

再回答ですみません。

前回ものは、結果ファイルが上書きされてしまう為、追加書き込みされるように修正しました。




Option Explicit

Const ADDR_FILE = "D:\KEKKA.TXT" '抽出たアドレスを入れるファイル名

Call Main()

Sub Main()

    Dim objArgs

    Dim i

    Dim nArgCnt

    Dim bRtn

    Dim sPath

    Dim objFS, objTXT, objTXT2, sLine

    Dim reg, Matches, mc, cnt

    Err.Clear

    'コマンドライン引数の有無チェック

    Set objArgs = WScript.Arguments

    nArgCnt = objArgs.Count

    If nArgCnt = 0 Then

        MsgBox "アイコンにファイルをドラッグ&ドロップしてください。", vbExclamation

        Exit Sub

    End If

    Set reg = New RegExp

    reg.Global = True

    reg.Pattern =  "([\w]+)([\w\.-]+)@([\w\-]+)\.([\w\.\-]*)[a-z][a-z]"

    Set objFS   = CreateObject("Scripting.FileSystemObject")

    Set objTXT2 = objFS.OpenTextFile( ADDR_FILE , 8 , True )

    'ファイル数の処理を実行

    cnt = 0

    For i = 0 To nArgCnt -1

        sPath = objArgs(i)

        Set objTXT  = objFS.OpenTextFile( sPath, 1, False )

        Do Until objTXT.AtEndOfStream

            sLine = objTXT.ReadLine

            Set Matches = reg.Execute(sLine)

            For Each mc in Matches

                objTXT2.WriteLine(mc.Value)

                cnt = cnt + 1

            Next

        Loop

        objTXT.Close

        Set objTXT  = Nothing

    Next

    objTXT2.Close

    Set objTXT2 = Nothing

    MsgBox "おしまい。[" & cnt & "]個あった", vbInformation

End Sub

id:atiran

ありがとうございます。

すごいです。理想的な処理です。

これはVBスクリプトになるのでしょうか。

なにを勉強するとこのコードを考える事ができるのでしょうか。

本当にありがとうございました。

2006/05/20 23:55:01
id:westfish No.6

westfish回答回数49ベストアンサー獲得回数12006/05/19 20:35:46

ポイント15pt

Pythonという言語を使えば、

import re

data = file("メールのファイル").read()

mail = re.findall("[a-zA-Z0-9_-\.]+\@[a-zA-Z0-9_-]+\.\w+", data)

で出現するメールアドレスの一覧が取得できます。(なおすべてのメールアドレスに合致する正規表現はないので、「へんてこなメアド」は取りこぼされる可能性があります。)

http://www.tt.rim.or.jp/~canada/comp/cgi/tech/mailaddrmatch/

id:atiran

ありがとうございます。

勉強させていただきます。

2006/05/22 11:18:47
  • id:llusall
    たくさんのポイントとイルカ君ありがとうございました。
    ポイントがあまりに増えていたのでビックリしました。

    WSH 【Windowsスクリプティングホスト】
    というもので、簡単で強力なバッチ処理ができます。

    ウィルスでお馴染みの拡張子が「vbs」となっていたりするため、忌み嫌う方も多くいるようです。

    セキュリティソフトによっては、警告や遮断されてしまうことがありますので、注意が必要です。

    お役にたててよかったです。
  • id:masato1975
    便乗で申し訳有りません・・・・
    メールアドレスに変えて URLを抽出したいのですが ご教示出来ないでしょうか?

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません