質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Q&A

解決済

1回答

2864閲覧

【文字化け】PowerShellを使ってOutlookのメールを取得し、Slackに転送する際の文字化け(日本語が表示されない)を解消する

nomura

総合スコア116

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

0グッド

0クリップ

投稿2019/08/29 09:03

編集2019/08/29 09:05

やりたいこと

  • 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などを組み合わせただけなのですが、アプローチとして正しそうな気がしています。

少々お時間ください

ご無沙汰してます、
自分が困ったときにしかログインしてないので利用頻度が低めのなか、コメントや評価いただきありがとうございます。

この後じっくり対応します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

powershellで実現したい、という目標は達成できていませんが、問題自体は解消しているので回答不要としてクローズします。

投稿2022/02/11 01:37

nomura

総合スコア116

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問