ClawsMail をどうにかしてPortableで使いたい
Portable 版が Portable.apps にあるけれど……古いままで、 Developer 版で止まってる。
すでに Portable 版があるなら、最新版でも Portable 化できるやろ、と、簡単に考えていたら、酷い目にあった。
動かすまで、クッソ手間かかった。まさか、UTF-8 の BOM 有り無しで詰まるとは思わんかった。Excel じゃねーんだぞ!
しゃーなし。これもGmail対策……。
1. フォルダ構成の作成
USB メモリ(または任意のポータブルフォルダ)内に、次の階層構造を作成。
ClawsMail/ ← ポータブルルートフォルダ
│
├── ClawsMail_Launcher.bat ← 2-1. 起動用バッチファイル
├── ClawsMail_Launcher.ps1 ← 2-2. 内部処理用 PowerShell スクリプト
├── App/ ← 3-3. Claws Mail 実行ファイル一式(claws-mail.exe 等)
└── data/
├── profile/ ← アカウント設定・プロファイル保存先
├── mail/ ← メールデータ保存先
└── tmp/ ← 一時ファイル・キャッシュ隔離先(自動生成)
2. 実行ファイルの配置
2-1. ClawsMail_Launcher.bat(起動用バッチファイル)
ポータブルルートに作成し、以下の内容で保存。
@echo off
setlocal
cd /d "%~dp0"
:: 1. ポータブル環境用のフォルダ定義
set "PORTABLE_DATA=%~dp0data"
set "CONFIG_DIR=%PORTABLE_DATA%\profile"
set "TMP_DIR=%PORTABLE_DATA%\tmp"
:: tmpフォルダが存在しなければ作成
if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
:: 2. システム変数を tmp 内に隔離
set "HOME=%TMP_DIR%"
set "USERPROFILE=%TMP_DIR%"
set "APPDATA=%TMP_DIR%\AppData"
set "LOCALAPPDATA=%TMP_DIR%\LocalAppData"
set "TEMP=%TMP_DIR%\Temp"
set "TMP=%TMP_DIR%\Temp"
:: 3. path の自動書き換え
powershell -NoProfile -ExecutionPolicy Bypass -File ".\ClawsMail_Launcher.ps1"
:: 4. Claws Mail を起動
start "" ".\App\claws-mail.exe" --alternate-config-dir "%CONFIG_DIR%"
endlocal
exit
2-2. ClawsMail_Launcher.ps1(処理本体スクリプト)
ポータブルルートに作成し、以下の内容を保存。
$ErrorActionPreference = "Stop"
try {
$baseDir = $PSScriptRoot
$configDir = Join-Path $baseDir "data\profile"
# 1. 隔離環境用の一時フォルダ・Windows標準ダミーフォルダの作成
$tmpDir = Join-Path $baseDir "data\tmp"
$desktopDir = Join-Path $tmpDir "Desktop"
$docsDir = Join-Path $tmpDir "Documents"
$dlDir = Join-Path $tmpDir "Downloads"
foreach ($d in @($configDir, $tmpDir, $desktopDir, $docsDir, $dlDir)) {
if (-not (Test-Path $d)) {
New-Item -ItemType Directory -Path $d | Out-Null
}
}
# BOMなし UTF-8 設定
$utf8NoBom = New-Object System.Text.UTF8Encoding $False
# 2. 以前のベースパスの検出
$oldBaseWin = ""
$files = Get-ChildItem -Path $configDir -Recurse -Force -File | Where-Object {
$n = $_.Name.ToLower()
$e = $_.Extension.ToLower()
return ($n -match 'rc$' -or $e -eq ".xml" -or $e -eq ".conf" -or $e -eq ".ini" -or $e -eq ".txt")
}
foreach ($f in $files) {
$content = [System.IO.File]::ReadAllText($f.FullName, $utf8NoBom)
if ($content -match '(?i)([a-z]:[^\n\r"<>\|]*?)[\\/]data[\\/](profile|mail|tmp)') {
$oldBaseWin = $matches[1].Replace('/', '\')
break
}
}
$updatedCount = 0
# 3. パス一括置換 & BOM自動除去
foreach ($f in $files) {
$content = [System.IO.File]::ReadAllText($f.FullName, $utf8NoBom)
$newContent = $content
if ($oldBaseWin -ne "" -and $oldBaseWin.ToLower() -ne $baseDir.ToLower()) {
$oldBaseUnix = $oldBaseWin.Replace('\', '/')
$newBaseWin = $baseDir
$newBaseUnix = $baseDir.Replace('\', '/')
$escOldWin = [System.Text.RegularExpressions.Regex]::Escape($oldBaseWin)
$escOldUnix = [System.Text.RegularExpressions.Regex]::Escape($oldBaseUnix)
$newContent = [System.Text.RegularExpressions.Regex]::Replace($newContent, $escOldWin, $newBaseWin, [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
$newContent = [System.Text.RegularExpressions.Regex]::Replace($newContent, $escOldUnix, $newBaseUnix, [System.Text.RegularExpressions.RegexOptions]::IgnoreCase)
}
# 既存ファイルのBOM有無を判定
$bytes = [System.IO.File]::ReadAllBytes($f.FullName)
$hasBom = ($bytes.Length -ge 3 -and $bytes[0] -eq 0xEF -and $bytes[1] -eq 0xBB -and $bytes[2] -eq 0xBF)
if ($content -ne $newContent -or $hasBom) {
[System.IO.File]::WriteAllText($f.FullName, $newContent, $utf8NoBom)
if ($hasBom) {
Write-Host ("FIXED (BOM Removed): " + $f.Name)
} else {
Write-Host ("UPDATED: " + $f.Name)
}
$updatedCount++
}
}
if ($updatedCount -eq 0) {
Write-Host "CHECK OK: All paths and encodings are clean."
}
Start-Sleep -Seconds 1
} catch {
Write-Host "--- ERROR OCCURRED ---"
Write-Host $_.Exception.Message
Pause
}
3. セットアップファイルの展開
3-1. 公式サイトから、ダウンロード。
3-2. 7-zip 等で展開。
3-3. Claws Mail 実行ファイル一式へ配置
4. 初回セットアップ手順
4-1. 起動:
ClawsMail_Launcher.batをダブルクリックして実行。
4-2. 初回ウィザード設定:
メールアカウントの設定を進める。
ウィザードの一番最後。メールボックス(Mailbox)の保存先指定画面で、初期値のまま進めず、ポータブルルートフォルダ配下の
data\mailのフルパスを指定。E:\ClawsMail\data\mail など、手入力やパスのコピーで。
4-3. 署名ファイル等の配置:
署名ファイル(
signature.txt)や添付ファイル用の一時保存先を設定する場合は、PC本体側ではなく必ずポータブルルートフォルダ配下のdata\profileやdata\配下 に配置して指定。
5. 日常の運用
起動方法:
常に
ClawsMail_Launcher.batから起動。
別PCへの移動・ドライブレター変更時:
何もしなくて良い。
ドライブレター(D:→E:など)が変わったり、親フォルダ名を変更して移動した場合でも、起動時にスクリプトが設定ファイル内の旧パスを自動検出し、現在の絶対パスへ全置換(BOMなしUTF-8)してから起動する。
PC本体への痕跡遮断:
APPDATAやUSERPROFILE等の一時環境変数がdata\tmpに設定されているため、ホストPC側の%appdata%やレジストリに影響しない。
コメント
コメントを投稿