捐血一袋救人一命

2020年12月3日 星期四

使用 PowerShell 讀取 GMail 摘要 RSS

使用 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 文字是三組大於12710進位數字

$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 意見: