やりたいこと
- OutlookのメールをSlackに転送する、ということをやろうとしています。
- 今回はPowerShellの勉強を兼ねているので、他の言語は使いません。
- PowerShellの仕様を理解していないので、おかしなことをやっている部分があります。ご指摘いただけると嬉しいです。
ソースコード
今はとりあえず動くことを確認したかったので、コピペとつぎはぎです。
$OL = New-Object -COMObject Outlook.Application $NS = $OL.GetNamespace("MAPI") $FL = $NS.GetDefaultFolder(6) $NW = Get-Date $YD = $NW.AddDays(-1) $ML = $FL.items | Where-Object {$_.ReceivedTime -gt $YD} Foreach ($I in $ML) { [string]$TEXT = "send Time: " + [string]$I.SentOn [string]$TEXT += "send From: " + [string]$I.SenderName [string]$TEXT += "Subject: " + $I.Subject [string]$TEXT += "本文: " + $I.Body # 送信内容が化けているのか検証 [string]$TEXT += $I.Attachments | Select-Object FileName Invoke-WebRequest -Method POST -ContentType "application/json" -Body (ConvertTo-Json @{"username"="Outlook";"text"="$TEXT"}) -Uri "[slack]" # RestMethodでは文字コードを変えられないらしい?ので、上記のように書き換え # Invoke-RestMethod -Method POST -Body (ConvertTo-Json @{"username"="outlook";"text"="[string]$TEXT"}) -Uri "[Slack]" }
結果
send Time: mm/dd/YYYY HH:MM:SS
send From: (送信者)
Subject: ?????? (日本語部分について ? )
??: ?????
[file...]
上記出力で、決め打ちの「本文:」も正しく表示されていないため、取得時に化けているだけではなさそう。
なお、日本語部分以外は問題なく表示されている。
できていること
- メールオブジェクトを作成して取得する
- 1件ずつSlackに送信する
- 期待する件数、内容が取得できている(?) → Slackで文字化けのため、正確に確認できていない
あとは質問の文字化けについて対応できれば完了です。
わからないこと
おそらく取得後の$I.subjectとbodyをUTF-8に変換すれば解決できそうな気がしています。
[System.Text.Encoding]とかGetStringなどを使えば変換できそうですが、どう組み合わせればいいか分かりません。
というのも、良い参考
期待すること
PowerShellの文字化けに関する解説ページ、
もしくは参考コード、
PowerPointのアーキテクチャの解説など。
文字コード問題がどうもPython2系と似たような話だろう、と勝手に高を括ってますが根拠がないのと、
仮にそうだったとして解決方法が分かるわけでもないので、文字コード変換の流れが分かった方が方針も見えると思いました。
回答補足
PowerShellでSlackに接続する部分がCURLなのでInvoke-を使っていますが、他の方法があって、文字化けの解消ができるならそちらも可です。
気になったこと
うまく変換できてるっぽい挙動もあったんですが、出力がバイナリ?っぽいものになったパターンがありました。
System.Text.Encodingなどを組み合わせただけなのですが、アプローチとして正しそうな気がしています。
少々お時間ください
ご無沙汰してます、
自分が困ったときにしかログインしてないので利用頻度が低めのなか、コメントや評価いただきありがとうございます。
この後じっくり対応します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。