メール添付ファイルからパスワードを外したのち、フォルダへ保存したい

「OUTLOOKメールメッセージを取得」→「繰り返し(コレクションの各要素)」→「添付ファイルを保存」
にて、指定された条件のメール添付ファイルを特定フォルダに全て保存するように現在しています。
次に、それらの添付ファイルには全て同じパスワード、例えば「AAAA」が付けられているのですが、それらを外した上で特定フォルダに保存したく、もしそのやり方があれば具体的に教えて頂けませんでしょうか。
よろしくお願い致します。

こんにちは

順序的には
1.まずメールに添付されているファイルを保存
2.ファイル形式に応じて、パスワードを用いて解凍あるいはパスワードを用いてオープン後別名保存
になると思います。

添付ファイルの種類によって対応が変わると思いますので、
このあたりを明確にいただくとよいかと思います。

コメント有難うございます。
まず添付ファイル自体は全てExcel形式です。
希望を言えば最初に「添付ファイルを保存」の時点でパスワード「例えばAAAA:全て同一」を解除してから特定フォルダに保存出来れば良いですが、それが無理であれば上記2の通りの手順を取りたいと思っています。
その際に活用可能なアクティビティについて具体的にお教え頂けますと助かります。

@wggcs044

Please check this on how to remove password using code

Else this also might help

Cheers

Yoichiさん
上記の件、いかがでしょうか。
もし可能でしたらアドバイスお願い致します。

こんにちは

希望を言えば最初に「添付ファイルを保存」の時点でパスワード「例えばAAAA:全て同一」を解除してから特定フォルダに保存出来れば良いですが、

こちらは難しいので一旦保存後、パスワード解除になります。
まず大枠は以下のとおりになります。

問題のパスワード解除ですが、これを実現できるアクティビティはないので
主に以下の方法が考えられます
1.UiAutomaion(クリックやショートカット)で解除する
2.パスワード解除のVBAを用意し、これを使う
3.Excel.Interopで解除する
4.NPOIで解除する
5.もしワークブックの構造が既知で、シートコピーだけで実現できるなら
パスワードのかかっていないワークブックへコピーする方法でも可能です。

上記のうち、1はパフォーマンスや精度の問題であまりおすすめできず、2もVBAのセキュリティ設定の問題があるので、おすすめではないです

取り急ぎ以下4のサンプルです

Using fs As New System.IO.FileStream(filename,System.IO.FileMode.Open,System.IO.FileAccess.ReadWrite)
Dim pfs As NPOI.POIFS.FileSystem.POIFSFileSystem = New NPOI.POIFS.FileSystem.POIFSFileSystem(fs)
Dim einfo As NPOI.POIFS.Crypt.EncryptionInfo = New NPOI.POIFS.Crypt.EncryptionInfo(pfs)
Dim dc As NPOI.POIFS.Crypt.Decryptor = NPOI.POIFS.Crypt.Decryptor.getInstance(einfo)
If dc.VerifyPassword(pwd) Then
	Dim wb As NPOI.XSSF.UserModel.XSSFWorkbook = New NPOI.XSSF.UserModel.XSSFWorkbook(dc.GetDataStream(pfs))   
    Using wfs = New System.IO.FileStream(newFileName,System.IO.FileMode.CreateNew,System.IO.FileAccess.ReadWrite)
	wb.write(wfs)
End Using
End If
End Using

シーケンス.xaml単体でも引数設定を変更すれば動作しますので、まずはこちら試してみてはと思います

Sample
Sample20231119-1.zip (10.5 KB)

Yoichiさん
ご返信ありがとうございます。
早速下記を自分の作成したプロセスにコピー/追加し、且つシーケンス.xamlファイルもコピーして自フォルダ内に置き、引数設定を揃えた(つもり)上でデバッグしてみました。
その結果、下記画像の通り
ライブラリのコンパイル プロセス中に予期しないエラーが発生しました:
The given key ‘C:\Users*****\Documents\UiPath*****ファイルを保存\シーケンス.xaml’ was not present in the dictionary.
と表示されました。
当方が不足している対応について、もしおわかりでしたらご教授頂けますと幸いです。

こんにちは

上記だけではよくわかりませんので、今一度ファイルの参照が正しいか等確認いただく、必要に応じてアクティビティの再配置などをしてみてはと思います。

なお上記の前に対象ファイルが、確かにパスワード解除できるか、単体での確認は先にしておいた方が良いかと思います。

ありがとうございます。
まず頂いたサンプルを元に単体でテストしてみたところ、
「コードを呼び出し: Exception has been thrown by the target of an invocation.」
となりSTOPしてしまいました。
引続きTryしてみます。

デバッグ実行時に例外で停止した際に、ローカルパネルの$ExceptionDetailsに詳細内容が格納されますので、まずはこちらを確認いただくと良いかと思います。

ご返信ありがとうございます。
ローカルパネルの$ExceptionDetailsには、下記のメッセージが表示されておりました。
何かインストールする必要があった?でしょうか。
いずれにしても、一筋縄ではいかないようですね。
ファイルパスワードを外して保存し直したかっただけなので、もう少しシンプルなやり方を想像しておりましたが、、

RemoteException wrapping System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. —> RemoteException wrapping NPOI.EncryptedDocumentException: Export Restrictions in place - please install JCE Unlimited Strength Jurisdiction Policy files
at NPOI.POIFS.Crypt.CryptoFunctions.GetCipher(IKey key,
CipherAlgorithm cipherAlgorithm,
ChainingMode chain,
Byte vec,
Int32 cipherMode,
String padding) in C:\github\npoi\main\POIFS\Crypt\CryptoFunctions.cs:line 234
at NPOI.POIFS.Crypt.CryptoFunctions.GetCipher(ISecretKey key,
CipherAlgorithm cipherAlgorithm,
ChainingMode chain,
Byte vec,
Int32 cipherMode) in C:\github\npoi\main\POIFS\Crypt\CryptoFunctions.cs:line 182
at NPOI.POIFS.Crypt.Agile.AgileDecryptor.hashInput(IEncryptionInfoBuilder builder,
Byte pwHash,
Byte blockKey,
Byte inputKey,
Int32 cipherMode) in C:\github\npoi\ooxml\POIFS\Crypt\Agile\AgileDecryptor.cs:line 242
at NPOI.POIFS.Crypt.Agile.AgileDecryptor.VerifyPassword(String password) in C:\github\npoi\ooxml\POIFS\Crypt\Agile\AgileDecryptor.cs:line 90
at UiPathCodeRunner_b5d990a64fb64383a64267ba424ba827.Run(String filename,
String pwd,
String newFileName)
— End of inner exception stack trace —
at System.RuntimeMethodHandle.InvokeMethod(Object target,
Span1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams) at System.Type.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args) at UiPath.Activities.System.Utilities.InvokeCode.CompilerRunner.Run(Object[] args) at UiPath.Activities.System.Utilities.InvokeCode.NetCodeInvoker.Run(String userCode, List1 inArgs,
IEnumerable`1 imps,
Object args)
at UiPath.Core.Activities.InvokeCode.Execute(CodeActivityContext context)
at System.Activities.CodeActivity.InternalExecute(ActivityInstance instance,
ActivityExecutor executor,
BookmarkManager bookmarkManager)
at System.Activities.ActivityInstance.Execute(ActivityExecutor executor,
BookmarkManager bookmarkManager)
at System.Activities.Runtime.ActivityExecutor.ExecuteActivityWorkItem.ExecuteBody(ActivityExecutor executor,
BookmarkManager bookmarkManager,
Location resultLocation)

あいにくアクティビティが対応していないので少々面倒な処理の部類に入ります。

上記エラーですが、この方法だと厳しいかもしれないので、InvokeCodeの中身を以下の3行のみにしてみて、ただしく解除できるか試してもらえますでしょうか?

Using wfs = New System.IO.FileStream(newFileName,System.IO.FileMode.CreateNew,System.IO.FileAccess.ReadWrite)
    UiPath.Excel.Encryption.OfficeCryptography.DecryptFile(filename,pwd,wfs,True)
End Using

Yoichiさん
お陰様でこちらにてパスワード解除テストが出来ました。
有難うございました。
一方で、追加の問題が出ました。
パスワードは確かに全ファイル同一の「例:AAA」ではあるものの、下記3パターンの場合があり全てのファイルは解除できていない状況です。
①読み取りパスワード →解除できた
②書き込みパスワード →解除できず
③読み取りパスワード&書き込みパスワード →解除できず
事前に正しく条件をお伝え出来ておらず申し訳ありません。
また、今はプロジェクトフォルダ内の「result」フォルダ内にアウトプットエクエルが保存されるようになっていましたが、「添付ファイルを保存」で保存したフォルダ(例えばマイドキュメント)内で上書き保存させられれば、と思っています。
こちらは「newFileName」変数の規定値を変えれば保存先変えられる?でしょうか。

あと一点、「OUTLOOKメールメッセージを取得」→「繰り返し(コレクションの各要素)」→「添付ファイルを保存」を一定時間ループさせて、メール着信の都度、フォルダへのファイル格納を行いたいと思っています。こちらについても組み込んで対応は可能と思って間違いは無いでしょうか。
お時間ある際にでもお教え頂けると助かります。

こんにちは

上記のように入力にバリエーションがあるのであれば、

を検討したほうが良いかもしれませんが、いかがでしょうか?

また、今はプロジェクトフォルダ内の「result」フォルダ内にアウトプットエクエルが保存されるようになっていましたが、「添付ファイルを保存」で保存したフォルダ(例えばマイドキュメント)内で上書き保存させられれば、と思っています。
こちらは「newFileName」変数の規定値を変えれば保存先変えられる?でしょうか。

既知値ですとresultフォルダには作成していないと思います。
newFileNameにフルパス付のファイル名を渡すとその名前で作成されます

あと一点、「OUTLOOKメールメッセージを取得」→「繰り返し(コレクションの各要素)」→「添付ファイルを保存」を一定時間ループさせて、メール着信の都度、フォルダへのファイル格納を行いたいと思っています。こちらについても組み込んで対応は可能と思って間違いは無いでしょうか。

問題ないと思いますが環境依存事項もあるかもしれませんので、実際に試していただくのが良いかと思います。