设为首页 收藏本站
查看: 802|回复: 0

Powershell 之POP3邮件管理

[复制链接]

尚未签到

发表于 2018-9-2 06:31:22 | 显示全部楼层 |阅读模式
################################################################################  
#配置信息
  

  
$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'
  
    }
  
}
  

  

  

  

  
Get-MailMessage | Out-GridView



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-561240-1-1.html 上篇帖子: Powershell 之收集服务器配置 下篇帖子: Powershell 之压缩
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表