『IIJ セキュアMX』Windows環境で動作する「SMX迷惑メール誤判定報告ツール」を作成しておきました

## １．きっかけ

セキュアMXを利用していると、明らかなスパムメール（例えば本文のリンクが[トレンドマイクロによるWebサイトの安全性の評価](https://global.sitesafety.trendmicro.com/)に引っかかるような。。）がすり抜けて受信されることもあります。

その際に、迷惑メール判定エンジンの精度向上に活用するべく用意された、迷惑メール誤判定窓口の送信先は用意されているのですが、
次のどちらかの方法のみです。
（「IIJセキュアMXサービス 基本機能 マニュアル」より引用）
- IIJサービスオンラインで申告する
- 迷惑メールフィルタで誤判定されたメールをメールで申告する

まず、IIJサービスオンラインでの申告は、
管理者アカウントでのログインが必要であり、多くの利用者では利用できません。

次に、メールで申告する方法ですが、
宛先のメールアドレスが書いてあるのみで、次のような準備は利用者が自ら行わなくてはならないのです。。
（「IIJセキュアMXサービス 基本機能 マニュアル > メールの誤判定を申告する」より引用）
![メールの誤判定を申告する_抜粋.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/1a557914-f523-bcda-4290-db5735774cb6.png)


多くのセキュリティ製品、および総務省の施策では、Outlookなどメールクライアントのプラグインとして簡単に送信できる、迷惑メール報告用のツールが用意されているのですけどね。。

例）
- （総務省）[迷惑メール情報提供用プラグイン ダウンロードサイト](https://plugin.antispam.soumu.go.jp/)
  - （Qiita投稿）[迷惑メール情報提供用プラグインをOutlook2016に入れYahoo!メールで利用する設定手順](https://qiita.com/makotsait/items/89ec2c4904f8ba1f133d)
- （マイクロソフトサポート）[迷惑メール報告アドインを使用する](https://support.microsoft.com/ja-jp/office/%E8%BF%B7%E6%83%91%E3%83%A1%E3%83%BC%E3%83%AB%E5%A0%B1%E5%91%8A%E3%82%A2%E3%83%89%E3%82%A4%E3%83%B3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B-b5caa9f1-cdf3-4443-af8c-ff724ea719d2)
- （Cisco）[Cisco Secure Email Submissionアドイン](https://www.cisco.com/c/ja_jp/support/docs/security/email-security-appliance/214133-how-to-submit-email-messages-to-cisco.html#toc-hId-1578803259)
- （NTT西日本）[セキュリティ対策ツール for Windows 迷惑メール対策ツールバーで、迷惑メールが通常のメールと判定された場合の対処方法](https://f-security.jp/v6/support/faq/200394.html)

従いまして、もう少し容易に、利用者から迷惑メール誤判定の申告を行える仕組みを作ってみました。

## ２．作成
例によってChatGPTでコード生成を行い、それを修正しました。

- ファイル構成
これを、社内共有フォルダに置いて、ショートカットを利用者に配布します。
```
SMX迷惑メール誤判定報告ツール
│  SMX迷惑メール誤判定報告ツール.cmd
│  SMX迷惑メール誤判定報告ツール.cmd - ショートカット.lnk
│
└─system
    │  displaymail.ps1
    │  mapitool.exe
```

#### （１）OutlookのMSG形式メールを、eml形式に変換するツール
「ruby-msg（mapitool.exe）」
 ➡ Python版「mapitool.exe」

[こちら](https://code.google.com/archive/p/ruby-msg/downloads) から現時点最新版「mapitool-1.5.0-mswin32-stand_alone.zip」を入手しzip展開後、
system フォルダに mapitool.exe を置きます。
（cles::blog 平常心是道 様）[ .msg を .eml に変換する (ruby-msg編）](https://blog.cles.jp/item/6664)


（2024.8.15 更新）
運用していたところ「ruby-msg 1.5.0（mapitool.exe）」には、
件名（Subject）等ヘッダー部分や、本文に、日本語（所謂２バイト文字）が含まれていると、
文字化けしたり、その行ごと削除してしまう事象がありました。
そして、このプロジェクトは2012年から更新が無く、改修される目途が無かったため、
最低限の機能だけ確認できたPython版「mapitool.exe」として作り直しました。
（Qiita）[「mapitool.exe」(ruby-msg)を代替するPython版mapitool（暫定）の作成](https://qiita.com/hiro-matsumoto/items/086472b064540f14b31b)

#### （２）Outlookメール生成PowerShellスクリプト「displaymail.ps1」
これも system フォルダに置きます。
```powershell
Write-Host $args[0]

Add-Type -Assembly 'Microsoft.Office.Interop.Outlook'
$Outlook = New-Object -ComObject Outlook.Application
$Mail = $Outlook.CreateItem(0)
$Mail.Subject = '迷惑メールが、正常なメールと判定された'
$Mail.Body = 'SMX迷惑メール誤判定窓口　御中
よろしくお願いします。'
$Mail.Attachments.Add($args[0])
$Mail.Recipients.Add('[迷惑メールが、正常なメールと判定された場合のメールアドレス ※IIJのマニュアルを参照ください。]')
$Mail.Display()
```

#### （３）動作用Windowsコマンドラインスクリプト「SMX迷惑メール誤判定報告ツール.cmd」
```bat
@echo off
cd %~dp0
setlocal

REM 入力ファイルを取得
set "inputfile=%~1"
set "filename=%~n1"

REM msgファイルをemlファイルへ変換
"%~dp0system\mapitool.exe" -i "%inputfile%"

REM 所定のアドレスへメールを送信
PowerShell.exe -ExecutionPolicy RemoteSigned -File "%~dp0system\displaymail.ps1" "%~dp1%filename%.eml"

REM メール送信後にemlファイルを削除
del "%~dp1%filename%.eml"

```

#### （４）起動用ショートカット「SMX迷惑メール誤判定報告ツール.cmd - ショートカット」
![ショートカットのプロパティ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/f0f76ed3-7bfb-255e-a0be-3d660cb22bbd.png)

## ３．利用の様子
受信されてしまった迷惑メールをドラッグ＆ドロップすることで、申告メールの生成が行えるようになりました。
![「SMX迷惑メール誤判定報告ツール」動作の様子.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1667967/3afd326e-1729-571e-da53-30de9dcda249.gif)

以上です。