当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

作者:精品下载站 日期:2024-12-14 09:12:59 浏览:15 分类:玩电脑

使用 Microsoft Graph PowerShell 发送电子邮件


您可以使用 Send-MgUserMail PowerShell cmdlet 从 Exchange Online 发送电子邮件。连接 Microsoft Graph 后,您还可以发送自动电子邮件,而无需插入凭据。本文将向你展示如何使用 Microsoft Graph PowerShell 中的 Send-MgUserMail cmdlet 发送 Exchange Online 电子邮件。

Send-MgUserMail 先决条件

以下先决条件是必不可少的:

  • 购买将用于身份验证目的的 Microsoft 365 用户许可证。

注意:Send-MgUserMail cmdlet 不适用于试用版或开发人员租户帐户。除非它是共享邮箱,否则它也无法在未经许可的邮箱中工作。共享邮箱需要有许可用户作为成员,并具有“发送为”权限才能用于 Microsoft 365 身份验证。

安装 Microsoft Graph PowerShell

首先,您需要安装 Microsoft Graph PowerShell 模块。

Install-Module Microsoft.Graph -Force
Import-Module Microsoft.Graph

重要提示:您需要 Microsoft Graph 2.0 或更高版本才能使用新参数。

验证您的 Microsoft Graph PowerShell SDK 模块版本。

Get-InstalledModule Microsoft.Graph | ft -AutoSize

让我们检查一下使用 cmdlet Send-MgUserMail 发送电子邮件的 PowerShell 脚本。

使用 Send-MgUserMail 发送电子邮件

如上所述,您可以使用 PowerShell 脚本发送电子邮件。为了使其更易于理解,我们将开始发送包含基本消息的电子邮件。然后,我们将向您展示向您要发送的电子邮件添加更多信息的其他方法,例如添加抄送/密件抄送和附件。

我们将向您展示两种使用 Send-MgUserMail 发送电子邮件的不同方法:

  • 发送带有凭据的电子邮件(使用许可邮箱登录)
  • 无需凭据即可发送自动电子邮件(注册应用程序和客户端密钥)

注意:配置 SPF、DKIM 和 DMARC 身份验证方法,以便发送的电子邮件将传送到收件人的收件箱,而不会被垃圾邮件过滤器阻止或传送到垃圾邮件文件夹。

Send-MgUserMail 包含基本消息

使用以下 PowerShell 脚本发送基本电子邮件。

  • 第 2 行中填写发件人
  • 在第第 3 行中填写收件人
  • 在第第 4 行中填写电子邮件的主题
  • 在第第 5 行中填写电子邮件的正文消息
  • 选择第 6 行中的HTML文本作为消息电子邮件的类型
  • 选择true将电子邮件保存在“已发送邮件”文件夹中,或选择“假”以不在第第 7 行行中的“已发送邮件”中保存电子邮件

注意:发件人必须是来自您的租户的电子邮件。

# Email details
$sender = "[email protected]"
$recipient = "[email protected]"
$subject = "Sending with MgUserMail"
$body = "Come and join us at the biggest tech event!"
$type = "HTML" #Or you can choose "Text"
$save = "false" #Or you can choose "true"

# Import MgGraph module
Import-Module Microsoft.Graph.Users.Actions

# Connect to MgGraph with required permissions
Connect-MgGraph -Scopes 'Mail.Send', 'Mail.Send.Shared'

$params = @{
    Message         = @{
        Subject       = $subject
        Body          = @{
            ContentType = $type
            Content     = $body
        }
        ToRecipients  = @(
            @{
                EmailAddress = @{
                    Address = $recipient
                }
            }
        )
    }
    SaveToSentItems = $save
}
# Send message
Send-MgUserMail -UserId $sender -BodyParameter $params

使用上述脚本,如果您尚未使用正确的权限连接到 Microsoft Graph,您可以获得 Microsoft 登录提示。请记住使用许可邮箱登录。

注意:如果其中一位用户拥有具有代理发送代表发送权限的许可邮箱,您也可以使用未经许可的共享邮箱进行签名。

带文本的基本电子邮件将如下例所示。

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

如果您想获得有关该邮件的更详细信息,您可以查看原始邮件。

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

使用抄送和密件抄送发送 MgUserMail

使用以下 PowerShell 脚本通过抄送和密件抄送发送电子邮件。

  • 第 2 行中填写发件人
  • 在第第 3 行中填写收件人
  • 在第第 4 行中填写抄送收件人
  • 第 5 行中填写密件抄送收件人
  • 在第第 6 行中填写电子邮件的主题
  • 在第第 7 行中填写电子邮件的正文消息
  • 选择 HTML文本 作为第 第 8 行 行中邮件的类型
  • 选择true将电子邮件保存在已发送邮件文件夹中,或选择false不将电子邮件保存在第第9行的已发送邮件中
# Email details
$sender = "[email protected]"
$recipient = "[email protected]"
$ccrecipient = "[email protected]"
$bccrecipient = "[email protected]"
$subject = "Sending with MgUserMail"
$body = "Come and join us at the biggest tech event!"
$type = "HTML" #Or you can choose "Text"
$save = "false" #Or you can choose "true"

# Import MgGraph module
Import-Module Microsoft.Graph.Users.Actions

# Connect to MgGraph with required permissions
Connect-MgGraph -Scopes 'Mail.Send', 'Mail.Send.Shared'

$params = @{
    Message         = @{
        Subject       = $subject
        Body          = @{
            ContentType = $type
            Content     = $body
        }
        ToRecipients  = @(
            @{
                EmailAddress = @{
                    Address = $recipient
                }
            }
        )
        CcRecipients  = @(
            @{
                EmailAddress = @{
                    Address = $ccrecipient
                }
            }
        )
        BccRecipients = @(
            @{
                EmailAddress = @{
                    Address = $bccrecipient
                }
            }
        )
    }
    SaveToSentItems = $save
}
# Send message
Send-MgUserMail -UserId $sender -BodyParameter $params

电子邮件的结果通过抄送和密件抄送收件人发送。

注意:密件抄送不会显示,您必须在密件抄送收件人的收件箱中检查。

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

发送 MgUserMail 带附件

您还可以发送带有附件的邮件。因此,您需要在 C:\temp 中创建一个附件文件。

请按照以下步骤创建附件文件:

  • 输入文本欢迎!
  • 将其命名为文件
  • 将其另存为.txt,路径为C:\temp

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

使用以下 PowerShell 脚本发送包含抄送、密件抄送和附件文件的电子邮件。

  • 第 2 行中填写发件人
  • 在第第 3 行中填写收件人
  • 在第第 4 行中填写抄送收件人
  • 第 5 行中填写密件抄送收件人
  • 在第第 6 行中填写电子邮件的主题
  • 在第第 7 行中填写电子邮件的正文消息
  • 在第第 8 行中填写保存 .txt 文件的附件路径
  • 选择 HTML文本 作为第 第 11 行 行中邮件的类型
  • 选择true将电子邮件保存在“已发送邮件”文件夹中,选择“假”则不在第第 12 行行中的“已发送邮件”中保存电子邮件
# Email details
$sender = "[email protected]"
$recipient = "[email protected]"
$ccrecipient = "[email protected]"
$bccrecipient = "[email protected]"
$subject = "Sending with MgUserMail"
$body = "Come and join us at the biggest tech event!"
$attachmentpath = "C:\temp\file.txt"
$attachmentmessage = [Convert]::ToBase64String([IO.File]::ReadAllBytes($AttachmentPath))
$attachmentname = (Get-Item -Path $attachmentpath).Name
$type = "HTML" #Or you can choose "Text"
$save = "false" #Or you can choose "true"

# Import MgGraph module
Import-Module Microsoft.Graph.Users.Actions

# Connect to MgGraph with required permissions
Connect-MgGraph -Scopes 'Mail.Send', 'Mail.Send.Shared'

$params = @{
    Message         = @{
        Subject       = $subject
        Body          = @{
            ContentType = $type
            Content     = $body
        }
        ToRecipients  = @(
            @{
                EmailAddress = @{
                    Address = $recipient
                }
            }
        )
        CcRecipients  = @(
            @{
                EmailAddress = @{
                    Address = $ccrecipient
                }
            }
        )
        BccRecipients = @(
            @{
                EmailAddress = @{
                    Address = $bccrecipient
                }
            }
        )
        Attachments   = @(
            @{
                "@odata.type" = "#microsoft.graph.fileAttachment"
                Name          = $attachmentname
                ContentType   = "text/plain"
                ContentBytes  = $attachmentmessage
            }
        )
    }
    SaveToSentItems = $save
}
# Send message
Send-MgUserMail -UserId $sender -BodyParameter $params

使用抄送、密送收件人和您创建的附件文件发送的电子邮件的结果。

注意:密件抄送不会显示,您必须在密件抄送收件人的收件箱中检查。

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

使用 Send-MgUserMail 自动发送电子邮件

您还可以发送电子邮件,而无需插入凭据或收到 MFA 提示。为此,您需要在 Azure AD 中注册应用程序。然后,您需要在 Azure AD 中为您的应用程序创建客户端密钥。最后,您必须为这个新创建的应用程序分配权限。

1. 在Azure中注册新应用程序

您必须注册应用程序才能获取应用程序(客户端)ID 和目录(租户)ID。

  1. 登录 Microsoft Entra 管理中心并输入您的凭据
  2. 展开身份
  3. 单击应用程序 > 应用程序注册
  4. 点击新注册

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

  1. 将您的应用程序命名为MgUserMail
  2. 选择仅此组织目录中的帐户(- 单个租户)
  3. 点击注册

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

  1. 复制应用程序(客户端)ID并将其粘贴到记事本中
  2. 复制目录(租户)ID并将其粘贴到记事本中

稍后在连接 Microsoft Graph 时将需要这些值。

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

2. 为新应用程序创建客户端密钥

转到 Azure AD 中的 MSGraph 机器人应用程序概述页面。

要在 Microsoft Entra 门户中为您的应用程序创建客户端密钥,请按照下列步骤操作:

  1. 单击证书和机密
  2. 单击客户端密钥 > 新客户端密钥
  3. 输入描述
  4. 选择到期日期
  5. 点击添加

注意:客户端密钥的有效期最长为 24 个月(2 年)。您可以使用 PowerShell 在 Azure AD 中创建无限的客户端密钥。

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

  1. 复制客户端密钥并保存

注意: 除非在创建后立即查看客户端密钥值,否则无法查看。请记住在离开页面之前保存创建的密码。

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

3.分配API权限

您已注册一个新应用程序并为此应用程序创建了客户端密钥。现在我们需要为 MgUserMail 应用程序选择 API 权限。

所需时间:8 分钟

如何为新创建的应用程序分配API权限。

  1. 分配 API 权限

    点击API 权限
    点击添加权限

    [玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

  2. 请求 API 权限

    在 Microsoft API 选项卡下 >
    单击Microsoft Graph

    [玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

  3. 选择应用程序权限

    点击应用程序权限
    搜索User.Read.All
    选择用户> User.Read.All
    单击添加权限

    [玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

  4. 授予管理员同意

    点击授予 a-d 管理员同意
    点击

    [玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

  5. 已成功授予管理员对所请求权限的同意

    查看下方的绿色复选标记状态

    [玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

4. 使用 Send-MgUserMail 发送自动电子邮件

我们将发送一封自动电子邮件,其中包含抄送收件人、密件抄送收件人和附件文件。请记住创建附件.txt 文件并将其保存在C:\temp

注意:如果您想发送基本的自动电子邮件,请在命令行前使用井号标签 (#) 以排除某些选项。

您需要将以下参数更改为您自己的值。

  • 在第第 2 行中输入应用程序(客户端)ID
  • 在第 第 3 行中输入目录(租户)ID
  • 在第第 4 行中输入客户端密钥
  • 第 25 行中输入发件人
  • 在第第 26 行中输入收件人
  • 在第第 27 行中输入抄送收件人
  • 在第第 28 行中输入密件抄送收件人
  • 在第第 29 行中输入电子邮件的主题
  • 在第第 30 行中输入电子邮件的正文
  • 在第第 31 行中输入附件路径
  • 选择第 34 行中的HTML文本作为消息电子邮件的类型
  • 选择true将电子邮件保存在“已发送邮件”文件夹中,或选择“假”以不在第第 35 行行中的已发送邮件中保存电子邮件

运行以下 PowerShell 脚本。

# Configuration
$ClientId = "687ec903-4cec-4ebb-a7b1-720e93edfe85"
$TenantId = "a2ff010e-0e03-4c56-8863-2ae7f07876dd"
$ClientSecret = "hhc8Q~juTTuU~qn9Y286lcchlSnP6EAYlFl-lcHo"

# Convert the client secret to a secure string
$ClientSecretPass = ConvertTo-SecureString -String $ClientSecret -AsPlainText -Force

# Create a credential object using the client ID and secure string
$ClientSecretCredential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $ClientId, $ClientSecretPass

# Connect to Microsoft Graph with Client Secret
Connect-MgGraph -TenantId $TenantId -ClientSecretCredential $ClientSecretCredential

# Email details
$sender = "[email protected]"
$recipient = "[email protected]"
$ccrecipient = "[email protected]"
$bccrecipient = "[email protected]"
$subject = "Sending with MgUserMail (Client Secret)"
$body = "Come and join us at the biggest tech event!"
$attachmentpath = "C:\temp\file.txt"
$attachmentmessage = [Convert]::ToBase64String([IO.File]::ReadAllBytes($AttachmentPath))
$attachmentname = (Get-Item -Path $attachmentpath).Name
$type = "HTML" #Or you can choose "Text"
$save = "false" #Or you can choose "true"

# Import MgGraph module
Import-Module Microsoft.Graph.Users.Actions

$params = @{
    Message         = @{
        Subject       = $subject
        Body          = @{
            ContentType = $type
            Content     = $body
        }
        ToRecipients  = @(
            @{
                EmailAddress = @{
                    Address = $recipient
                }
            }
        )
        CcRecipients  = @(
            @{
                EmailAddress = @{
                    Address = $ccrecipient
                }
            }
        )
        BccRecipients = @(
            @{
                EmailAddress = @{
                    Address = $bccrecipient
                }
            }
        )
        Attachments   = @(
            @{
                "@odata.type" = "#microsoft.graph.fileAttachment"
                Name          = $attachmentname
                ContentType   = "text/plain"
                ContentBytes  = $attachmentmessage
            }
        )
    }
    SaveToSentItems = $save
}
# Send message
Send-MgUserMail -UserId $sender -BodyParameter $params

使用客户端密钥发送的电子邮件的结果,包括抄送、密件抄送收件人和附件文件。

注意:密件抄送不会显示,您必须在密件抄送收件人的收件箱中检查。

[玩转系统] 使用 Microsoft Graph PowerShell 发送电子邮件

您可以使用 Send-MgUserMail cmdlet 成功发送电子邮件。

了解更多:导出 Microsoft 365 用户许可证 »

结论

您了解了如何使用 Send-MgUserMail PowerShell cmdlet 发送 Exchange Online 电子邮件。请记住使用具有“代理发送”或“代表发送”权限的许可邮箱进行签名。如果您不想使用凭据登录,则需要创建一个客户端机密应用程序,以使用 Send-MgUserMail cmdlet 发送自动电子邮件。

您喜欢这篇文章吗?您可能还喜欢配置基于证书的身份验证来运行自动化脚本。不要忘记关注我们并分享这篇文章。

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯