16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

添付ファイルのパスワードは私の誕生日です♡からの脱却!Power Automate Desktopで真面目にPPAP自動化してみた。

Last updated at Posted at 2022-06-12

PPAPとは

もちろん「ぱいなぽーぺーん、あぽーぺーん」のことではありません。PPAPとはコンピューターセキュリティ手法の一つで、「ファイルをZIP形式で圧縮し、そのZIPファイルを暗号化してパスワードで保護し、メールで添付する」「それを解凍するパスワード入りメールを別送する」手法のことです。皆さん実際に実務でよく使われているのではないでしょうか。

私はこの作業が大嫌いです。まず、ZIP化するのが面倒くさい、パスワード掛けるのも面倒くさい。そして1通目を送った時点で2通目を送るのを忘れる。一体過去何度「すみませーん、パスワードが届かないのでファイルを解凍できませーん。」という連絡をいただいたことでしょうか。

しかしながら、私はこれを解決する画期的な方法を思いつきました。次のようなメールを1通送るのです。

添付ファイルを送付いたします。
パスワードは私の誕生日4桁です。

そうです、あらかじめよくメールのやり取りをするお取引様各位に私の誕生日をカレンダーに記録していただくのです。これだと、私の誕生日を知っている人しかファイルを解凍できないですよね。しかも誕生日になるとお取引様から暖かい「おめでとう」メッセージをいただくことができるのです。なんと素晴らしい、今日の記事は以上です。完。

…とはなりません。この手法大きな問題があって、さすがの私も店長とか部長とかお偉い方々にこんなふざけたメールを送ることができません。それにもしかしたらお取引さまの中には「こいつ、すげえ自分の誕生日アピッてくるじゃん、うざ!」と思っている方がいらっしゃるかもしれません。

そんな時に知ったのがPower Automate Desktopでした。このツールを使いこなすことができれば、私の長年の不満が解決されるかも…。つい3日前にPADの存在を知ったばかりですが、見よう見まねでそれっぽいものを作ってみたいと思います。

1 ファイルをZIP化して固定パスワードで一斉送信してみる

1-1 今回使用したツール

:point_up:Power Automate Desktop

1-2 参考にさせていただいた記事

1-3 フィードバックをお願いする

PADはありがたいことにたくさんの先駆者の記事があるので、どの作業もそんなに困りませんでした。上記2つの記事を組み合わせてフローを作成し、大体の実装が終わった段階で同僚のみなさんにZIPファイルとパスワードメールを送ってみました。
   
「見てみて!みんなに送ったメール、ボタン1個で自動化してみたんだけど、ちゃんと届いている?」
後輩A「おお!すごいですね。なんかパスワードメール来た後に添付ファイル届いてますけど…」
「なぬ?届く順番が逆になっているということ?そっか・・・。フローだとZIPファイル作成してからパスワードを送る流れになってるんだけど、思ったより添付ファイル作成に時間がかかるってことか…」  
→こちらの問題は「wait」を追加することで解決しました。
WAIT.JPG
ここで陽気な薬剤師S氏が登場しました。彼は「仕事は趣味」と言い切り、全くの独学でシステム構築を続け、何百枚もある薬局書類の自動化を成し遂げたとんでもないお方です。5分楽したいがために50時間システム構築に熱意を燃やす、それが彼のモットーです。

S氏「お、なにやっているんですか?」
「ファイルZIP化とその後パスワードを送る作業の自動化プログラムをPADで作成しているところです。」
S氏「なんと!つい最近までIphone7を使っていたアナログ派の加藤さんとは思えない発言ですね。お、意外とちゃんとできているじゃないですか。ZIPのパスワードは何にしているんですか?」
「会社番号4桁で固定にしています。」
S氏「あれ、誕生日作戦はやめたんですか?」
「押しつけがましいのでやめました(笑)」
S氏「でもここまで作ったなら惜しいなあ。パスワードがランダムで出たほうがいいですよね。」
後輩A「確かに。他社さんはアルファベットと数字のランダム8文字でてくるシステム使っています。」
「乱数とか使うってことですか?そんなレベルの高いこと私に求める?PAD知ったの三日前ですよ」
S氏「なに言っているんですか、できますよ。人の心は難しいですが、システムは一歩ずつ進めば必ず完成します。私たちが思い描けるようなことは必ず実現できるってことですよ。ほらさっさとやる!」
いつものS氏の無茶振り!ここからが地獄の始まりでした…

2 パスワードランダム作業への挑戦 ~地獄への入り口~

それではまず完成品をお披露目したいと思います。

2-1 最終完成品お披露目

2-1-1完成品動画

2通メールが順番通りに届いているのが確認できるかと思います。

2-1-2全体のフロー

2-1-3完成品コード

完成品コードはこちら
Text.Random UseUpperCaseLetters: True UseLowerCaseLetters: True UseDigits: True UseSymbols: False MinimumLength: 6 MaximumLength: 6 RandomText=> PW
Folder.GetSpecialFolder SpecialFolder: Folder.SpecialFolder.LocalApplicationData SpecialFolderPath=> SpecialFolderPath
SET zip_path TO $'''%SpecialFolderPath%\\Temp\\attachment.zip'''
Folder.GetFiles Folder: $'''自分が圧縮したいファイル''' FileFilter: $'''*''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files
Compression.ZipFiles ArchivePath: zip_path FilesOrFoldersToZip: Files CompressionLevel: Compression.CompressionLevel.BestBalanceOfSpeedAndCompression Password: PW ArchiveComment: $'''''' ZipFile=> ZipFile
Excel.LaunchExcel.LaunchAndOpenUnderExistingProcess Path: $'''メールアドレスの情報が入ったExcel.xlsx''' Visible: True ReadOnly: False Instance=> ExcelInstance
Excel.GetFirstFreeColumnRow Instance: ExcelInstance FirstFreeColumn=> FirstFreeColumn FirstFreeRow=> FirstFreeRow
Excel.ReadFromExcel.ReadCells Instance: ExcelInstance StartColumn: 1 StartRow: 1 EndColumn: FirstFreeColumn - 1 EndRow: FirstFreeRow - 1 ReadAsText: False FirstLineIsHeader: True RangeValue=> ExcelData
Outlook.Launch Instance=> OutlookInstance
LOOP FOREACH CurrentItem IN ExcelData
    Outlook.SendEmailThroughOutlook.SendEmail Instance: OutlookInstance Account: $'''自分のメールアドレス''' SendTo: CurrentItem['メールアドレス'] Subject: $'''添付ファイルの送信''' Body: $'''%CurrentItem['名前']%さま
添付ファイルを送信します。
パスワードはこの後別途送付いたします。''' IsBodyHtml: True Attachments: zip_path
END
WAIT 20
LOOP FOREACH CurrentItem IN ExcelData
    Outlook.SendEmailThroughOutlook.SendEmail Instance: OutlookInstance Account: $'''自分のメールアドレス''' SendTo: CurrentItem['メールアドレス'] Subject: $'''パスワード送付''' Body: $'''%CurrentItem['名前']%
先ほどのメールのパスワードはこちらです。
%PW%''' IsBodyHtml: True
END
File.Delete Files: zip_path

2-2 地獄の一端 

第2フェーズで一番苦労したのは「ランダムテキスト」の変数の取り扱いでした。一度何も見ないで自分で作ろうとしてみたのですが、発行されたランダムテキストがパスワードですよという定義づけをしてあげる必要があるらしく、その方法がわからず苦しみました。結論、「特別なフォルダを取得」した後に「変数を設定する」という作業が必要となります。
今回は下記の記事を参考にさせていただいたので、ぜひご覧ください。

また、重要なのが一番最後のファイルの削除をするフローです。ファイルの削除を怠ると2回目、3回目以降の実験で下記のような事象が発生します。

後輩A「パスワード送られてきたのですが、このパスワードだと添付ファイル開けません…」
「なぬ!?じゃあ、謎の数字の羅列を送るだけのメールになっているということ?」

これではただの迷惑メールです。私は最初、上記リンク記事の一番最後にある「ファイルの削除」フローは今回必要なさそうだからと勝手に省略していたのですが、新しいパスワードが発行されるたびに添付ファイルのパスワードが上書き保存されるわけではないようです。そのため、添付ファイルについている古いパスワードと新しく発行されたパスワードが一致しないという現象が起きてしまったのではないでしょうか。必ず全てのファイルを削除し、残っているファイルが悪さをしないようにしましょう。
S氏より「システムが動かない時は、誰かのせいにしがちですけど、100%自分が悪いです。初心者はまず完コピするところから始めないと。横着するからだめなのです。」と説教されました。ちぇっ。

3 完成品をみんなにお披露目

ようやくできたランダムパスワードで開くPPAPをみんなにお披露目しました。
:blush:これは画期的です!会社を揺るがす大改革です!
 →そんなに褒められると調子に乗ります。
:confused:パスワードの頭に「.」が来るとコピペしづらいです。
 →これはランダムテキストの設定で解決することができました。
ランダムテキストの作成.JPG
:wink:この人にはAのファイル、この人にはBのファイル、というところまで自動化できると嬉しいです。
 →なんと、レベルの高いことを…!次回以降の課題とさせてください。
:sweat:ファイル名が文字化けするので、そこはなんとかならないでしょうか?
 →直近のPADでは文字化け解消されているとの情報もあったのですが、今回は解決できずでした。

最後に大事なことを一つお伝えいたします。PPAPはセキュリティ対策としてはあまり意味のないものとして、最近問題視されつつあります。そのため、実験する際は「鼻毛が出てしまっている写真」とか「白目をむいている写真」とか機密性が低いけど、他の人に見られたら恥ずかしい資料で実験してください。間違っても個人情報などは扱わないように!

16
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?