Powershell 之POP3邮件管理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Powershell 之POP3邮件管理相关的知识,希望对你有一定的参考价值。
################################################################################ #配置信息 $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 "[email protected]" #账号 $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
以上是关于Powershell 之POP3邮件管理的主要内容,如果未能解决你的问题,请参考以下文章
Office 365 如何使用powershell查询邮件追踪