PowerShell からメールを受信してみたいと思います。ただ、.Net Framework 標準では受信クラスはないため、メールを受信するには、サーバーに接続してPOPを喋って、ヘッダーやボディーなど色々解析するなどの方法が必要になります。が、今回は.Netで作られた、下記のライブラリを利用させて頂くことにします。
TKMP.DLL : http://uwa.potetihouse.com/library/tkmpdll.html
なお、POPを喋るようであれば、下記のCodeZineのサイトなどが参考になるかと思います。
http://codezine.jp/article/detail/477
■DLLの読み込み
まずは、TKMP.DLLを読み込みます。
[void][System.Reflection.Assembly]::LoadFile("C:\Temp\TKMP.dll")
■POP認証の作成
POPサーバーに送信する認証を作成します。
$credential = New-Object TKMP.Net.BasicPopLogon("username", "password")
■POPクライアントの作成
サーバーに対して接続したり、メールを取り出したりするためのクライアントを作成します。
$pop = New-Object TKMP.Net.PopClient($credential, "popserver", < POP3ポート番号 >)
■メール解析
メールボックスからメールを取得して、ヘッダーやボディーを読み込んで解析をします。
$mails = $pop.MailDatas
foreach($mail in $mails)
{
[void]$mail.ReadHeader() # ヘッダー部分の読み取り
[void]$mail.ReadBody() # ボディー部分の読み取り
# ヘッダー部分解析
$header = New-Object TKMP.Reader.MailReader($mail.HeaderStream, $false)
# ボディー部分解析
$body = New-Object TKMP.Reader.MailReader($mail.DataStream, $false)
}
■表示
ヘッダーやボディーを解析したあとは、コレクションから目的の項目を取得することができます。
write "件名:`t"$header.HeaderCollection["Subject"] # ヘッダーのSubject項目表示
write "差出人:`t"$header.HeaderCollection["From"] # ヘッダーのFrom項目表示
write "本文`r`n"$body.MainText # メール本文表示
■メール受信サンプル
[void][System.Reflection.Assembly]::LoadFile("C:\Temp\TKMP.dll")
$pop = New-Object TKMP.Net.PopClient((New-Object TKMP.Net.BasicPopLogon("username", "password")), "popserver", 110)
try
{
[void]$pop.Connect() # POP接続
$pop.MailDatas | % `
{
[void]$_.ReadHeader() # ヘッダー部分の読み取り
[void]$_.ReadBody() # ボディー部分の読み取り
# メール読み取り
New-Object TKMP.Reader.MailReader($_.HeaderStream, $false) | % { $_.HeaderCollection["Subject"], $_.HeaderCollection["To"], $_.HeaderCollection["From"], [Datetime]$_.HeaderCollection["Date"] }
New-Object TKMP.Reader.MailReader($_.DataStream, $false) | select MainText
[void]$_.Delete() # メール削除
}
$pop.Close() # POP切断
}
catch [Exception]
{
write $_.Exception
if($pop.Connected) { $pop.Close() }
}