当前位置: 首页 > 知识库问答 >
问题:

如何用PowerShell和EWS将邮件消息导出到EML或MSG文件

年业
2023-03-14

我目前正在编写一个PowerShell脚本,它需要从特定邮箱中提取所有邮件作为.eml或.msg文件,并将它们保存在备份服务器上。我将powershell版本5与Exchange 2010管理控制台模块(EWS)一起使用。

目前,我的脚本能够访问收件箱文件夹中的所有邮件及其属性,如正文、主题、附件等。然而,我找不到一种简单的方式或方法来导出消息(及其附件)。所以我的问题是,Exchange 2010中的EWS是否提供了从邮箱中提取/保存消息的方法?

add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010

$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\1.2\Microsoft.Exchange.WebServices.dll"
[void][Reflection.Assembly]::LoadFile($dllpath)
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP1)
$windowsIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$sidbind = "LDAP://<SID=" + $windowsIdentity.user.Value.ToString() + ">"
$aceuser = [ADSI]$sidbind
$service.AutodiscoverUrl($aceuser.mail.ToString())

$MailboxName = get-mailbox -Identity myMailBox@myWorkPlace.com

$folderidcnt = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MailboxName.PrimarySmtpAddress.ToString())
$rootfolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, $folderidcnt)


$offset = 0;
$view = new-object Microsoft.Exchange.WebServices.Data.ItemView(10000, $offset)

$response = $service.LoadPropertiesForItems($results, [Microsoft.Exchange.WebServices.Data.PropertySet]::FirstClassProperties)

foreach ($mail in $results){

if ($mail.ToString() -eq "Microsoft.Exchange.WebServices.Data.EmailMessage"{
    **"Function to export this message an an .eml or .msg file on a remote shared folder"**
     }
}

共有1个答案

云凌
2023-03-14

代码的最后一部分需要是:

if ($mail.ToString() -eq "Microsoft.Exchange.WebServices.Data.EmailMessage") {
    $mailSubject = $mail.Subject
    $mailProps = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.ItemSchema]::MimeContent)
    $mail.Load($mailProps)
    #TODO: clean up $mailSubject so it's filesystem friendly
    $fStream = New-Object System.IO.FileStream("C:\Temp\$mailSubject.eml", [System.IO.FileMode]::Create)
    $fStream.Write($mail.MimeContent.Content, 0, $mail.MimeContent.Content.Length)
    $fStream.Close()
}

$mailSubject=$mail.subject在我们加载电子邮件之前抓取主题(然后主题“丢失”)。

$mail.load($mailprops)加载电子邮件和mime内容。

您将需要添加一些规则来清理主题,或者对电子邮件进行不同的命名,当然。

 类似资料:
  • 我试着从微软找到一些解决方案,找到了这个独立软件,一个第三方解决方案,它工作很好。当格式为msg时,该文件看起来很好。但它是为客户扩展许可解决方案(使用30天的演示)。这是我用过并工作得很好的东西,并尝试找到类似这样的东西:

  • 我需要协助将预订/会议导入Office365。我可以将预订信息从我们的旧的基于Web的系统导出到csv中,但需要一种方式导入到Office365中的exchange中。 我发现的最有希望的方法是使用Exchange Web服务通过powershell连接到云,然后使用模拟将预订作为合适的用户根据新创建的房间邮箱重新创建。但如果有更好的办法,我愿意接受其他建议。 然后加载函数并尝试如下所示的测试命令

  • null msg有什么能力而eml没有,反之亦然?

  • 我找不到任何使用SOAP API正确列出所有公用文件夹邮箱和公用文件夹的解决方案。我只找到了powershell命令或C#方法。如果有人知道如何获取/列出所有公用文件夹,请提供给我的解决方案。

  • 我想从Postman扩展(Chromium)导出一个特定请求,并将其发送给另一个开发人员,以便他们可以导入它。我该怎么做?

  • 我的要求是从Exchange 2010 Server上的某个邮箱获取所有电子邮件。我需要保存所有附件和消息本身到文件系统。我没有问题检索和保存附件,但唯一的wat EWS允许我保存的消息是一个.eml文件。这些文件将进入一个文档存储库系统,该系统将显示.msg文件,但不显示.eml文件。我正在使用一个Web服务应用程序来检索使用EWS的电子邮件和附件。我使用一个控制台应用程序调用Web服务,然后完