Shuriken 2018 を永遠に利用する方法 🥰

# JUSTSYSTEM社の最強メールソフトを使い続ける

## まずShurikenって何。
最後に販売されたのはShuriken 2018
2022年2月9日に販売終了、2023年2月9日にサポートセンタへの受付も終了しておりますが
まず間違いなく国内で市販されていた最強のメールソフトです。
個人的には大学卒業する直前に入手したのが一太郎先生にバンドルされていたShuriken2.0。
バージョンアップする都度購入しながら、気がつけば四半世紀ｗ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/63043184-6a8f-0fad-cf27-b8f00c7fef2e.png)
メモ；販売もサポートも終了はいつも肉の日 🍖

[製品紹介(ShurikenPro)](https://www.justsystems.com/jp/products/shuriken_pro/)
[Shuriken Wikipedia](https://ja.wikipedia.org/wiki/Shuriken)

## 最近何があったのか。
日進月歩。パソコン通信をするため電話回線を利用してピコピコしていた時代とは異なり
日々時代は進化しています。星の数ほどあるシステム群を利用するため、IDとPasswordを
どうするべきか悩まれるケースがあるかと思います。
特にメールソフト。セキュリティインシデントになりやすいソフトウェアは周辺環境の
変化にはどこまでも追従し続ける必要があります。すぐ使えなくなっちゃう・・。

製品名の通り2018年に開発終了したということは最近の技術に追従しないことを意味。
結構致命的。

昨年、2022年2月にMS社のexchangeがTLS1.0を遮断するようになったタイミングから
Shurikenがつながらないと嘆きの声がちらほらと。私も突然メールが受信不可に。
泣きながらサポートセンタに問い合わせをしたところ同じ件が多発していたこともあり
当日中に迅速なパッチ提供をしていただく神対応に遭遇。
※現在公式サポートサイトからパッチが提供されていますのでご安心を。
https://support.justsystems.com/faq/1032/app/servlet/qadoc?QID=058525

このときからOUTLOOKに戻る選択肢はなくなり、命枯れるまで利用することを宣言。

## 現在なぜ使えないのか。
本題。2022年10月1日からMS社はOffice365やExchangeで基本認証を廃止しています。
基本認証、つまるところID/Passwordを指定して認証認可をする古き良き仕組みです。
もちろんShurikenも基本認証しかサポートしていません。
※先進認証なんて知らないメールソフト全滅。

> 2022年10月1日以降は、「Microsoft 365」、「Exchange Online」では基本認証が廃止されるため、基本認証を使用できません。ほかのメールソフトをご利用ください。

あ。詰んだw
しかも結構簡単に。公式サポートからも回避不可とのコメントが出たことを踏まえて
ここからが「あきらめないエンジニア」の地道な活動がはじまります。

非公式対応となりますのであくまで参考程度にしてください。誰も保証してくれません。

## 構成

結論；Oauth2 Proxy を利用します。
https://oauth2-proxy.github.io/oauth2-proxy/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/5ef7f585-9f74-555b-6b1b-bd788b50a423.png)
上記OAuth2.0に対応していないメールソフトのために存在するという記載をみた瞬間
涙が出ました。

ShurikenはOAuth2に対応していません。
そのため直接MSと通信するのではなく、一旦Oauth2 Proxy経由で認証認可をしてから
Shuriken本体からメールの送受信をする構成です。

## Oauth2 Proxyの設定内容
タスクバーにあるOAというアイコンが該当。OS起動時に常駐させています。
こっそりShuriken監視プログラムも現役w
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/fb175f20-5ca2-b11d-c441-32928cfa0ebc.png)

設定した内容はこちら。
````
/path/to/emailproxy.config
permission_url = https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize
token_url = https://login.microsoftonline.com/organizations/oauth2/v2.0/token
oauth2_scope = https://outlook.office365.com/IMAP.AccessAsUser.All https://outlook.office365.com/POP.AccessAsUser.All https://outlook.office365.com/SMTP.Send offline_access
redirect_uri = http://localhost
client_id ← 要設定
client_secret  ← 要設定
token_salt  ← 要設定
access_token  ← 要設定
access_token_expiry  ← 要設定
refresh_token  ← 要設定
last_activity  ← 要設定
````

## ShurikenからOauth2認証を利用する方法

気が付けば以下の Shuriken アカウント設定で無事に運用できています。

|  設定内容  |  設定値  |
| ---- | ---- |
|  受信サーバ  |  localhost  |
|  受信サーバポート番号  |  1993  |
|  SSLを使用  |  しない  |
|  送信サーバ  |  localhost  |
|  送信サーバポート番号  |  1587  |
|  SSLを使用  |  しない  |
|  IMAP before SMTP  |  する  |
|  SMTP認証  |  する  |

## Oauth2のエンドポイントを構築する方法
まず MS Azure アプリ登録からShurikenエンドポイントを作成。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/26ed4de6-171e-f2dc-0379-374c9f099263.png)
認証Webでリダイレクトは localhost で動作する Oauth2 Proxy を設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/8cd04ab7-af8c-449e-2690-3da25e2aada1.png)
認証認可で必要なクライアントIDとシークレットの発行。この内容をconfigに登録。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/08a378c3-47b9-2ab3-4fbd-8a546c72676e.png)

画面の情報を全て引用することができないので若干内容が薄い説明文章・・。
しかしこれらを設定すればちゃんと動くのですよ。まだ Shuriken が現役で🎅
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/5151f351-1850-8dc9-1568-08e7d07b16d8.png)

## そして伝説に
日本中にShurikenの開発復活を首を長く期待している仲間がいるかと思いますが
執筆時点 (2023年2月断面) まだ開発復活の話は届いておりません。

とはいえ何よりも諦めない心さえあれば。いつの日か気持ちは相手に届くのです。
いつでも笑顔で前向きに。

## 忘れたころに使えなくなる罠

最近利用中の Windows PC が故障してファンが大音量をするため
騒音おじさんとなったため
仕方なく短期間でWindows 10 からWindows 11 に移行する方針に。

ひとまず手裏剣は合計20GBほどのデータファイルをまとめてdmp
ファイル転送に半日かかったことはさておき
ちゃんと oauth2 もこっそり移行して手裏剣を使っていました

しかし突如として 2023/11/30 11:50 JST 頃に認証エラーが :sob:
サブスクリプションが無効ですとAzure側でエラーが出たので
もしや不正利用が漏洩したかと驚愕。

正規の手裏剣ユーザなのに。

たしかに office365 を利用してよいのかどうか分からずですが。

```python
Failed to initialize pythonnet: 
System.TypeInitializationException: 'Delegates' のタイプ初期化子が例外をスローしました。 ---> Python.Runtime.BadPythonDllException: Runtime.PythonDLL was not set or does not point to a supported Python runtime DLL. See https://github.com/pythonnet/pythonnet#embedding-python-in-net ---> System.MissingMethodException: Failed to load symbol PyUnicode_AsUnicode. ---> System.ComponentModel.Win32Exception: 指定されたプロシージャが見つかりません。
   --- 内部例外スタック トレースの終わり ---
   場所 Python.Runtime.Platform.WindowsLoader.GetFunction(IntPtr hModule, String procedureName)
   場所 Python.Runtime.Runtime.Delegates.GetFunctionByName(String functionName, IntPtr libraryHandle)
   --- 内部例外スタック トレースの終わり ---
   場所 Python.Runtime.Runtime.Delegates.GetFunctionByName(String functionName, IntPtr libraryHandle)
   場所 Python.Runtime.Runtime.Delegates..cctor()
```

なんだこのエラー。教えてエラい人・・。

:::note info
このエラーメッセージは、Python.NET（pythonnet）の初期化に関する問題を示しています。Python.Runtime.dllの初期化に失敗し、特にPyUnicode_AsUnicodeという関数をロードする際に問題が発生しています。ここから分かる主な問題点は以下の通りです：

・Python.NETの初期化失敗: Python.Runtime.dllが適切に初期化されていない、または見つからないことを示しています。
・互換性の問題: 使用しているPythonのバージョンとPython.NETのバージョンが互換性がない可能性があります。
・DLLの不足または破損: 必要なDLLファイルが不足しているか、破損している可能性があります。
:::

なんと環境依存。Windows11でも動作していたのに。
気にせずバージョンアップ結構。

```python
pip install --upgrade pythonnet
```

解決したw

人生諦めないのはいいことです。
もし何かあったらだれかに聞きながら自分で解決していきましょう。