Posts tagged ‘outlook Express’

Windows XPなどにインストールされているOutlook Expressは、
起動100回毎にメールボックスの自動最適化が行われます。

この動作が原因でメールボックスが壊れることがあるため、
無効にします。

1.  レジストリエディタを起動する。
「ファイル名を指定して実行」に「regedit」と入力し、実行する。

2. レジストリエディタより、以下のキーまで移動する。
HKEY_CURRENT_USER\Identities\【ユーザID】\Software\Microsoft\Outlook Express\5.0

3.  キーを編集する。
右ペインで「Compact Check Count」というキーがあるので、
削除するか、0にすることでリセットすることができます。
このカウントが100になると最適化を実行するメッセージが表示されるのです。

また、普通に使用している以外にも、デスクトップサーチを有効にしていると、
デスクトップサーチが自動的にメールに対してインデックスを作成するので、
自分では100回も開いていないのに、最適化が要求されることがあります。

参考:マイクロソフトのサポート情報
http://support.microsoft.com/kb/971708/ja

vbscriptを利用してOutlook Expressのメールルールをバックアップする例です。
このスクリプトはバックアップファイル(レジストリファイル)の保存先、ファイル名を引数で渡します。

例:
(script名) c:\test.reg

バックアップしたファイルは、ダブルクリックすることでインポートが可能です。
ここでの注意点として、OSを再インストールする度にGUIDが変わってしまいます。
バックアップした時とインポートする時の状況が違う時は、バックアップしたファイルをメモ帳などで開き、
GUIDを置き換える必要があります。

例:
バックアップ元のGUID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
インポート先のGUID  {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz}
1.インポート先のGUIDを調べる。
2.バックアップ元のファイルを開き、{xxx~}を置き換える。
メモ帳の場合は「検索する文字列」にバックアップ元のGUIDを、「置換後の文字列」にインポート先のGUIDを入れましょう。

また、このスクリプトでは、reg.exeというファイルを利用しています。Windows XPから標準でインストールされているものになります。
Windows 2000ではreg.exeが入っていないため、使えません…

ソースのダウンロードは こちら です。

Option Explicit

'#######################################################
'# Global-Configration #
'#######################################################

Const OpenTextFileForReading = 1
Const OpenTextFileForWriting = 2
Const OpenTextFileForAppending = 8

Const REG_SZ = 1
Const REG_EXPAND_SZ = 2
Const REG_BINARY = 3
Const REG_DWORD = 4
Const REG_MULTI_SZ = 7

'*************************
' Call Main Program
'*************************
Main()

'*************************
' Start Main Program
'*************************

Sub Main()

'#######################################################
'# Local-Configration #
'#######################################################

Dim OBJ_WshShell 'WSH Shell Object
Dim OBJ_FSO 'File System Object
Dim OBJ_Folders 'Folder Object
Dim OBJ_Args 'Argument Object

Dim COL_Folders 'Collection Object

Dim STR_FileName 'String Object
Dim STR_StoreOwner 'String Object
Dim STR_RulePath 'String Object
Dim STR_LogFolder 'String Object
Dim STR_LogFile 'String Object
Dim STR_Temp 'String Object
Dim i

Set OBJ_WshShell = WScript.CreateObject("WScript.Shell")
Set OBJ_FSO = WScript.CreateObject("Scripting.FileSystemObject")
Set OBJ_Args = WScript.Arguments

'引数チェック
If OBJ_Args.Count = 1 Then

STR_FileName = OBJ_Args(0)

If Right(LCase(STR_FileName), 4) = ".reg" Then

Else

STR_FileName = STR_FileName & ".reg"

End If

If OBJ_FSO.FileExists(STR_FileName) Then

WScript.Echo "エラー:出力先に同名のファイルが存在します。処理を続行出来ません。"
WScript.Quit 1

End If

Else

WScript.Echo "エラー:引数の数が不正です。処理を続行出来ません。プログラムを中止します。"
WScript.Quit 1

End If

'【Get Mail Store Owner & Mail Store Path】
STR_StoreOwner = OBJ_WshShell.RegRead("HKEY_CURRENT_USER\Identities\Last User ID")
If Err.Number <> 0 Then

WScript.Echo "エラー:処理実行中にエラーが発生しました。処理を続行出来ません。プログラムを中止します。"
Err.Clear
Set OBJ_FSO = Nothing
WScript.Quit 1

End If

STR_RulePath = """HKEY_CURRENT_USER" & "\Identities\" & STR_StoreOwner & "\Software\Microsoft\Outlook Express\5.0\Rules"""
If Err.Number <> 0 Then

WScript.Echo "エラー:処理実行中にエラーが発生しました。処理を続行出来ません。プログラムを中止します。"
Err.Clear
Set OBJ_FSO = Nothing
WScript.Quit 1

End If

'レジストリのExport
OBJ_WshShell.Run "reg.exe export " & STR_RulePath & " " & STR_FileName, 0, True
If Err.Number = 0 Then

WScript.Echo "レジストリのバックアップは正常に完了しました。出力したファイルは " & STR_FileName & " です。"
WScript.Quit 0

Else

WScript.Echo "エラー:レジストリのバックアップに失敗しました。"
WScript.Quit 1

End If

End Sub

vbscriptにてOutlook Exressのメールファイル(.dbx)の一覧とサイズを出力する例です。

Option Explicit
'On Error Resume Next

'#######################################################
'# Global-Configration #
'#######################################################

Const OpenTextFileForReading = 1
Const OpenTextFileForWriting = 2
Const OpenTextFileForAppending = 8

Const HKEY_CURRENT_USER = &H80000001

'*************************
' Call Main Program
'*************************
Main()

'*************************
' Start Main Program
'*************************

Sub Main()

'#######################################################
'# Local-Configration #
'#######################################################

Dim OBJ_WshShell 'WSH Shell Object
Dim OBJ_FSO 'File System Object
Dim OBJ_Folders 'Folder Object

Dim COL_Folders 'Collection Object

Dim STR_FileName 'String Object
Dim STR_StoreOwner 'String Object
Dim STR_StorePath 'String Object
Dim STR_LogFolder 'String Object
Dim STR_LogFile 'String Object
Dim STR_Temp 'String Object
Dim i

Set OBJ_WshShell = WScript.CreateObject("WScript.Shell")
Set OBJ_FSO = WScript.CreateObject("Scripting.FileSystemObject")

'【Get Mail Store Owner & Mail Store Path】
STR_StoreOwner = OBJ_WshShell.RegRead("HKEY_CURRENT_USER\Identities\Last User ID")
If Err.Number <> 0 Then

STR_Work = MsgBox("処理実行中にエラーが発生しました。処理を続行出来ません。プログラムを中止します。" & vbCrLf & "Error Code: RegRead Error-001" ,vbOkOnly + vbCritical,"エラーが発生しました")
Err.Clear
Set OBJ_FSO = Nothing
WScript.Quit 1

End If

STR_StorePath = OBJ_WshShell.RegRead("HKEY_CURRENT_USER\Identities\" & STR_StoreOwner & "\Software\Microsoft\Outlook Express\5.0\Store root")
If Err.Number <> 0 Then

STR_Work = MsgBox("処理実行中にエラーが発生しました。処理を続行出来ません。プログラムを中止します。" & vbCrLf & "Error Code: RegRead Error-002" ,vbOkOnly + vbCritical,"エラーが発生しました")
Err.Clear
Set OBJ_FSO = Nothing
WScript.Quit 1

End If

WScript.Echo "No,ファイル名,ファイルサイズ(MB)"

'【Get MailBox Folder & File-Size】
Set OBJ_Folders = OBJ_FSO.GetFolder(STR_StorePath)
Set COL_Folders = OBJ_Folders.Files
i = 1

For Each STR_FileName In COL_Folders

If LCase(Right(STR_FileName,4)) = ".dbx" Then

WScript.Echo i & "," & STR_FileName & "," & Round(STR_FileName.Size / 1000000,1)
i = i + 1

End If

Next

End Sub

Outlook ExpressはWindowsに標準でついており、企業でも使われていることが多いかと思います。

しかし、どんな便利なツールにも使い方を理解し、性質を知っていなければ大切なデータを失ってしまうことになります。

よくあるケースとして、メールデータのファイルである .dbxファイルのサイズが大きくなりすぎてデータが消えてしまうというものです。

Microsoftのサポートオンラインにも記述があります。

Outlook Express で使用される .dbx ファイルの最大ファイル サイズに関する情報

上記のサイトのように2Gに達するケースとしては、メールフォルダを分けずに、受信トレイに全てのメールを保存してしまい、

サイズが大きくなってしまうことが考えられます。

同じく、Outlook Expressの起動100回毎にメールフォルダの最適化が促されますが、 実行すると .dbxファイルが壊れてしまうことがあります。

2Gという制約があるものですから、1つのフォルダにメールをためずに、フォルダの分割を行いましょう。

方法は、メッセージルールを利用します。

メッセージルールの例として、

1. ドメイン毎(送信元)

2. 宛先毎(メーリングリスト) など
xxx@xxx.com宛
yyy@yyy.com宛など

3.アカウント毎

また、それぞれのフォルダを階層にして、年度を分けるなど工夫すれば1つのファイルが2Gにいくことはありません。