捐血一袋救人一命

江蘇拙政園

江蘇 拙政園

全家福

日本 和歌山城

賞楓之旅

千燈 夕照

水鄉千燈

蘆洲 微風運河

破曉時分

顯示具有 Gmail 標籤的文章。 顯示所有文章
顯示具有 Gmail 標籤的文章。 顯示所有文章

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 文字是三組大於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