使用 PowerShell 讀取 GMail 信箱資訊,需要先設定應用程式密碼,包括使用 Outlook或是使用Windows 10內建的 Mail 程式收發郵件。
或是想要讓事物機把掃描產生的圖檔,以電子郵件寄出,也需要設定應用程式密碼。
紅字部分,請自行更換成適當的資訊喔
Clear-Host # 讀取 GMail Samples $webclient = new-object System.Net.WebClient
# 這裡輸入的密碼,是 Application Password (應用程式密碼) # 如何產生 Application Password (應用程式密碼) # https://support.google.com/mail/answer/185833?hl=tw $webclient.Credentials = new-object System.Net.NetworkCredential ("my@email.address", "MyApplicationPassword") |
之前使用 .DownloadString Method,會發現中文字都被破壞掉,所以改用 .DownloadData
# 下載 RSS,這裡得到的是一堆十進位數字的陣列,Unicode 文字是三組大於127的10進位數字 $xml= $webclient.DownloadData("https://mail.google.com/mail/feed/atom") |
所以,接下來就是要將變數 $xml 的資訊轉換成文字(包含 Unicode)
$s = "" For($l=0;$l -lt $xml.Count; $l++){ If($xml[$l] -gt 127){ # 當數值大於 127,表示是 Unicode,所以轉換成16進位格式字串 $s += "%" + $xml[$l].ToString('x2') }Else{ # 小於等於 127 ,就直接轉成 Ascii 字元 $s += [char]$xml[$l] } } # 將 Unicode 編碼進行解碼,還原成中文字 $xml = ([URI]::UnescapeDataString($s)) |
這樣 $xml 就變成 XML 格式的字串了
# 輸出成 XML 檔案 $xml | Out-File -FilePath "D:\test.xml" -Encoding utf8 |
接下來要解析 XML內容,分欄顯示
# 雖然字串是 XML 格式,但不代表變數是 XML 型態,所以要進行轉換型態 $xml = [xml]$xml
# 設定 Format-Table 要輸出的格式 $format= @{Expression={$_.author.name};Label="Name"}, @{Expression={"|"};Label="|"}, @{Expression={$_.author.email};Label="E-Mail"}, @{Expression={"|"};Label="|"}, @{Expression={$_.title};Label="Title"}, @{Expression={"|"};Label="|"}, #@{Expression={$_.link|Select 'href'};Label="Link"}, # 當你使用瀏覽器開啟 Link 的連結,就會直接讀取該郵件 @{Expression={$_.link|Select-XML -XPath "@href"};Label="Link"}, @{Expression={"|"};Label="|"}, @{Expression={$_.summary};Label="summary"} # 輸出成 Table ,缺點是過長的欄位資訊就不會出現 $xml.feed.entry | format-table $format |
再來就是將 XML 內容,轉換成簡單的 HTML 檔案
# 所以底下將 XML 資訊轉換成 HTML 表格 $mail = @() $xml.feed.entry | ForEach { $hash = @{ "name" = $_.author.name "email" = $_.author.email "title" = $_.title "link" = ($_.link|Select-XML -XPath "@href") "summary" = $_.summary } $Line = New-Object -TypeName PSObject -Property $Hash $mail += $Line } $mail | ConvertTo-Html | Out-File -FilePath "D:\testxml.html" -Encoding oem |
0 意見:
張貼留言