通过


使用 Microsoft Graph 向 PowerShell 脚本添加电子邮件功能

在本文中,将扩展使用 Microsoft Graph 邮件 API 使用 Microsoft Graph 生成 PowerShell 脚本 中创建的应用程序。 使用 Microsoft Graph 列出用户的收件箱并发送电子邮件。

列出用户的收件箱

首先,在用户的电子邮件收件箱中列出邮件。

  1. 在经过身份验证的 PowerShell 会话中 $user ,验证变量是否已设置。

    PS > $user.DisplayName
    Megan Bowen
    
  2. 运行以下命令以列出用户的收件箱。

    Get-MgUserMailFolderMessage -UserId $user.Id -MailFolderId Inbox -Select `
      "from,isRead,receivedDateTime,subject" -OrderBy "receivedDateTime DESC" `
      -Top 25 | Format-Table Subject,@{n='From';e={$_.From.EmailAddress.Name}}, `
      IsRead,ReceivedDateTime
    
  3. 查看输出。

    Subject                                    From                    IsRead ReceivedDateTime
    -------                                    ----                    ------ ----------------
    Updates from Ask HR and other communities  Contoso Demo on Yammer  False  4/19/2022 10:19:02 PM
    Employee Initiative Thoughts               Patti Fernandez         False  4/19/2022 3:15:56 PM
    Voice Mail (11 seconds)                    Alex Wilber             False  4/18/2022 2:24:16 PM
    Our Spring Blog Update                     Alex Wilber             True   4/18/2022 1:52:03 PM
    Atlanta Flight Reservation                 Alex Wilber             False  4/13/2022 2:30:27 AM
    Atlanta Trip Itinerary - down time         Alex Wilber             False  4/12/2022 4:46:01 PM
    

列出收件箱代码说明

考虑用于列出用户收件箱的命令

访问已知邮件文件夹

命令 Get-MgUserMailFolderMessage 生成对 列表消息 API 的请求,特别是使用 GET /users/{user-id}/mailFolders/{folder-id}/messages 终结点。 API 仅返回请求的邮件文件夹中的邮件。 在这种情况下,由于收件箱是用户邮箱中默认的已知文件夹,因此可通过其已知名称对其进行访问: -MailFolderId Inbox。 非默认文件夹的访问方式相同,方法是将已知名称替换为邮件文件夹的 ID 属性。 有关可用已知文件夹名称的详细信息,请参阅 mailFolder 资源类型

访问集合

与上一 Get-MgUser 部分中返回单个 对象的命令不同,此方法返回消息集合。 Microsoft Graph 中返回集合的大多数 API 不会在单个响应中返回所有可用结果。 相反,它们使用 分页 返回部分结果,同时为客户端提供请求下一页的方法。

默认页面大小

使用分页的 API 实现默认页面大小。 对于消息,默认值为 10。 客户端可以使用 $top 查询参数请求更多 (或更少的 ) 。 在 Microsoft Graph PowerShell SDK 中,使用 -Top 25 参数完成添加$top

注意

通过 -Top 传递的值是上限,而不是显式数字。 API 返回一些 消息,最多返回 指定值。

集合排序

函数在 -OrderBy 请求上使用 参数来请求按消息接收时间排序的结果, (receivedDateTime 属性) 。 它包含DESC关键字 (keyword) 以便先列出最近收到的消息。 此参数将 $orderby 查询参数 添加到 API 调用。

发送邮件

现在,添加以经过身份验证的用户身份发送电子邮件的功能。

  1. 在经过身份验证的 PowerShell 会话中 $user ,验证变量是否已设置。

    PS > $user.DisplayName
    Megan Bowen
    
  2. 使用以下命令定义表示 发送邮件 API 的请求正文的对象。

    $sendMailParams = @{
        Message = @{
            Subject = "Testing Microsoft Graph"
            Body = @{
                ContentType = "text"
                Content = "Hello world!"
            }
            ToRecipients = @(
                @{
                    EmailAddress = @{
                        Address = ($user.Mail ?? $user.UserPrincipalName)
                    }
                }
            )
        }
    }
    
  3. 使用以下命令发送消息。

    Send-MgUserMail -UserId $user.Id -BodyParameter $sendMailParams
    

    注意

    如果使用 Microsoft 365 开发人员计划中的开发人员租户进行测试,则发送的电子邮件可能未送达,并且可能会收到无法交付的报告。 如果要取消阻止从租户发送邮件,请通过Microsoft 365 管理中心联系支持人员。

  4. 若要验证是否已收到消息,请重复 Get-MgUserMailFolderMessage 上一步中的 命令。

发送邮件代码说明

请考虑用于发送消息的命令。

发送邮件

命令 Send-MgUserMail 生成对 发送邮件 API 的请求。

创建对象

与以前调用 Microsoft Graph(仅读取数据)不同,此调用会创建数据。 若要使用 SDK 创建项,请创建一个表示请求正文的对象,设置所需的属性,然后在 参数中 BodyParameter 传递它。

后续步骤