|
################################################################################
#配置信息
$config=New-Object psobject
$config|Add-Member -MemberType NoteProperty -Name Server -Value "mail.xxx.com" #服务器地址
$config|Add-Member -MemberType NoteProperty -Name POP3Port -Value 995 #POP3协议端口
$config|Add-Member -MemberType NoteProperty -Name IMAPPort -Value 993 #IMAP协议端口
$config|Add-Member -MemberType NoteProperty -Name Account -Value "pop3@xxx.com" #账号
$config|Add-Member -MemberType NoteProperty -Name Passwd -Value "Aa123456" #密码
$config|Add-Member -MemberType NoteProperty -Name OnlyReceiveHeader -Value "false" #是否只下载邮件头信息(true-启用,false-禁用)
$config|Add-Member -MemberType NoteProperty -Name ResultSize -Value "11" #设置分页大小
$config|Add-Member -MemberType NoteProperty -Name EnablePage -Value "true" #是否启用分页设置(true-启用,false-禁用)
$config|Add-Member -MemberType NoteProperty -Name DownAttachPath -Value "false" #是否下载附件(true-启用,false-禁用)
$config|Add-Member -MemberType NoteProperty -Name AttachPath -Value "D:\PSTemplate\Attachments" #邮件附件存放地址
$config|Add-Member -MemberType NoteProperty -Name ClassFilePath -Value "c:\LumiSoft.Net.dll" #代码库文件
#POP3协议
function Login-POP3{
[void][reflection.assembly]::LoadFile($Config.ClassFilePath)
$pop3=New-Object LumiSoft.Net.POP3.Client.POP3_Client
if($pop3.IsConnected -ne 'true'){
$pop3.Connect($Config.Server,$Config.POP3Port,'true')
try{$pop3.Login($Config.Account,$Config.Passwd)}catch{Write-Warning "无法登录到服务器";Write-Host $Error[0];break}
}
return $pop3
}
#IMAP协议
function Login-IMAP{
[void][reflection.assembly]::LoadFile($Config.ClassFilePath)
$iMAP=New-Object LumiSoft.Net.IMAP.Client.IMAP_Client
if($iMAP.IsConnected -ne "true"){
$iMAP.Connect($Config.Server,$Config.IMAPPort,$true)
try{$iMAP.Login($Config.Account,$Config.Passwd)}catch{Write-Warning "无法登录到服务器";Write-Host $Error[0];break}
}
return $iMAP
}
#下载附件
function Download-Attach{
param($MailString)
$Attachments=$MailString.GetAttachments($true,$true)
foreach($Entity in $Attachments){
if($Entity.ContentDescription -ne $null){
$FileName=$Entity.ContentDescription
if($FileName -ne $null){
[System.IO.DirectoryInfo]$Dir=$config.AttachPath+"\"+$UID
if(! $Dir.Exists){
$Dir.Create()
}
[string]$Path=[System.IO.Path]::Combine($Dir.FullName,$FileName)
[LumiSoft.Net.MIME.MIME_b_SinglepartBase]$ByteObj=$Entity.Body
[System.IO.Stream]$DecodedDataStream=$ByteObj.GetDataStream()
try{
$FS=New-Object System.IO.FileStream($Path,[System.IO.FileMode]::Create)
}finally{
[void][LumiSoft.Net.Net_Utils]::StreamCopy($DecodedDataStream,$FS,4000)
}
$FS.Dispose()
Remove-Variable 'FS'
Remove-Variable 'DecodedDataStream'
Write-Host "$Path 文件已成功下载!" -ForegroundColor Green
}
}
}
}
#格式化数据
function Data-Format{
$psobject=New-Object psobject
$psobject| Add-Member -MemberType NoteProperty -Name ID -Value $i
$psobject| Add-Member -MemberType NoteProperty -Name UID -Value $UID
#$psobject| Add-Member -MemberType NoteProperty -Name IsDisposed -Value $IsDisposed
$psobject| Add-Member -MemberType NoteProperty -Name Date -Value $MailString.Date
$psobject| Add-Member -MemberType NoteProperty -Name From -Value $MailString.From.Address
$psobject| Add-Member -MemberType NoteProperty -Name To -Value $MailString.To.Address
$psobject| Add-Member -MemberType NoteProperty -Name Cc -Value $MailString.cc.Address
$psobject| Add-Member -MemberType NoteProperty -Name Bcc -Value $MailString.bcc.Address
$psobject| Add-Member -MemberType NoteProperty -Name Subject -Value $MailString.Subject
$psobject| Add-Member -MemberType NoteProperty -Name Body -Value $MailString.BodyHtmlText
$psobject| Add-Member -MemberType NoteProperty -Name Size -Value $MailSize
$psobject| Add-Member -MemberType NoteProperty -Name MessageID -Value $MailString.MessageID
$psobject| Add-Member -MemberType NoteProperty -Name IsMarkedForDeletion -Value $IsMarkedForDeletion
return $psobject
}
#
function Get-MailMessage{
$pop3=Login-POP3
$AllMails=$pop3.messages | Sort-Object -Property SequenceNumber -Descending
if(!$AllMails){
Write-Warning "当前邮箱账号没有邮件"
exit 1
}
#总邮件数
$Counts=$AllMails.Count
#第一封邮件编号
#[int]$FirstNumber=$AllMails[0].SequenceNumber
#分页设置
if($config.EnablePage -eq 'true'){
[int]$ResultSize=$config.ResultSize
}else{
$ResultSize=$Counts
}
#动态数组整合邮件信息
$Lists=New-Object System.Collections.ArrayList
#编号
$i=1
Write-Host "当前账号中总共有" -NoNewline
Write-Host $Counts -ForegroundColor Green -NoNewline
Write-Host "封邮件," -NoNewline
#如果邮件总数小于分页数,则取出所有数据
if($Counts -le $ResultSize){
Write-Host "已经为您获取最新的" -NoNewline
Write-Host "$Counts" -NoNewline -ForegroundColor Green
Write-Host "封邮件。"
foreach($Mails in $AllMails){
[String]$IsDisposed=$Mails.IsDisposed
[int]$Number=$Mails.SequenceNumber
[int]$UID=$Mails.UID
[int]$MailSize=$Mails.Size
[String]$IsMarkedForDeletion=$Mails.IsMarkedForDeletion
if($config.OnlyReceiveHeader -eq 'True'){
$MailString=[LumiSoft.Net.Mail.Mail_Message]::ParseFromByte($Mails.HeaderToByte())
}else{
$MailBytes=$Mails.MessageToByte()
$MailString=[LumiSoft.Net.Mail.Mail_Message]::ParseFromByte($MailBytes)
#######处理附件
if($config.DownAttachPath -eq 'true'){
Download-Attach $MailString
}
#######
}
$DataFormat=Data-Format
[void]$Lists.Add($DataFormat)
$i++
}
return $Lists
Remove-Variable 'Lists'
}else{
Write-Host "已经为您获取最新的" -NoNewline
Write-Host "$ResultSize" -NoNewline -ForegroundColor Green
Write-Host "封邮件。"
$j=1
foreach($Mails in $AllMails){
if($j -gt $ResultSize){
$Lists
Remove-Variable 'Lists'
$Lists=New-Object System.Collections.ArrayList
Write-Host "是否继续执行,每次将提取" -NoNewline
Write-Host $ResultSize -ForegroundColor Green -NoNewline
Write-Host "条记录 (y/n):"
$rh=Read-Host
if($rh -eq "n"){
return $Lists
}else{
$j=1
}
}
[String]$IsDisposed=$Mails.IsDisposed
[int]$Number=$Mails.SequenceNumber
[int]$UID=$Mails.UID
[int]$MailSize=$Mails.Size
[String]$IsMarkedForDeletion=$Mails.IsMarkedForDeletion
if($config.OnlyReceiveHeader -eq 'True'){
$MailString=[LumiSoft.Net.Mail.Mail_Message]::ParseFromByte($Mails.HeaderToByte())
}else{
$MailBytes=$Mails.MessageToByte()
$MailString=[LumiSoft.Net.Mail.Mail_Message]::ParseFromByte($MailBytes)
#######处理附件
if($config.DownAttachPath -eq 'true'){
Download-Attach $MailString
}
#######
}
$DataFormat=Data-Format
[void]$Lists.Add($DataFormat)
$i++
$j++
}
return $Lists
Remove-Variable 'Lists'
}
}
<#
$iMAP=Login-IMAP
$iMAP.SelectFolder('inbox')
$seqSet=[LumiSoft.Net.IMAP.IMAP_t_SeqSet]::Parse("1000:*")
$a=New-Object LumiSoft.Net.IMAP.IMAP_t_Fetch_i_Envelope
$b=New-Object LumiSoft.Net.IMAP.IMAP_t_Fetch_i_Uid
$c=New-Object LumiSoft.Net.IMAP.IMAP_t_Fetch_i_Flags
$d=New-Object LumiSoft.Net.IMAP.IMAP_t_Fetch_i_InternalDate
$e=New-Object LumiSoft.Net.IMAP.IMAP_t_Fetch_i_Rfc822
#New-Object LumiSoft.Net.IMAP.IMAP_t_Fetch_i
#>
Get-MailMessage | Out-GridView
|
|
|