使用Office 365直接发送和PowerShell发送电子邮件

你知道吗,你可以使用 Office 365 通过 PowerShell 发送邮件吗?在这篇文章中,你将学习如何使用 Office 365 直接发送和 PowerShell 的 \texttt{Send-MailMessage} 命令来发送邮件。

如果你想深入了解如何使用 PowerShell 发送邮件,请查看这篇关于 \texttt{Send-MailMessage} 的深入教程。

Office 365 直接发送 vs. SMTP 客户端提交

在我们深入了解 PowerShell 之前,请了解通过 PowerShell 发送邮件到 Office 365 不只有一种方式。Office 365 有两种支持的发送邮件方式。这些选项分别是直接发送SMTP 客户端提交SMTP 认证提交

SMTP 认证提交

SMTP 认证提交是最容易设置的方式。如果你打算从设备或应用程序发送邮件给内部和外部的收件人,你会选择这个选项。在 Office 365 中无需额外操作即可允许此操作。

此选项允许你使用任何发件人地址。但地址必须来自你已验证的接受域之一。

要使用SMTP 认证提交,你必须:

  • 拥有一个已授权的 Office 365 用户邮箱。此电子邮件地址将显示为邮件的发件人。
  • PowerShell(或其他客户端)必须能够解析并访问smtp.office365.com
  • 从客户端到 Office 365 必须打开 TCP 端口 587 或 25。

直接发送

升级一下复杂性的是直接发送选项。与SMTP身份验证提交类似,直接发送允许您使用任何发件人地址。此外,from地址必须来自您已验证的可接受域之一。

直接发送SMTP身份验证提交之间的主要区别在于不允许外部接收者。如果您需要发送到组织外的电子邮件接收者,则直接发送对您无效

直接发送有一些自己的要求/建议:

  • 此发件人地址不必是有效的邮箱。但如果您计划使用此地址接收NDR或回复,则需要。
  • 从您的客户端到Office 365的TCP端口25是打开的。
  • 设备必须能够解析并访问您的MX终结点URL(例如yourdomain-com.mail.protection.outlook.com
  • A static public IP address. This is to update your SPF record and avoid your messages getting flagged as spam (optional but recommended)

如果您不知道如何找到MX终结点URL,这里是一个快速教程:

  1. 登录Office 365管理门户
  2. 点击设置(1),选择(2),点击域名(3),复制MX指向地址或值(4)。
Finding Office 365 MX Endpoint URL

SMTP身份验证提交

发送电子邮件的第一种方法是通过SMTP客户端提交或SMTP身份验证提交。使用PowerShell的Send-MailMessage cmdlet,我们可以提供发送电子邮件所需的所有参数通过Office 365。

以下是通过此方法发送电子邮件的代码片段。

首先,您需要定义一个PowerShell PScredential对象,然后提供所有Send-MailMessage需要的参数。

# 获取凭据
$credential = Get-Credential

## 定义Send-MailMessage参数
$mailParams = @{
    SmtpServer                 = 'smtp.office365.com'
    Port                       = '587' # 或者'25'(如果不使用TLS)
    UseSSL                     = $true ## 或者不使用非TLS
    Credential                 = $credential
    From                       = '[email protected]'
    To                         = '[email protected]', '[email protected]'
    Subject                    = "SMTP Client Submission - $(Get-Date -Format g)"
    Body                       = 'This is a test email using SMTP Client Submission'
    DeliveryNotificationOption = 'OnFailure', 'OnSuccess'
}

## 发送消息
Send-MailMessage @mailParams

当您运行上面的代码时,您应该会收到一个发送给内部收件人(yourdomain.com)和外部域(notyourdomain.com)的电子邮件。

Internal Email
External email

直接发送(需要TLS)

类似于SMTP身份验证提交,您可以使用几乎相同的参数Send-MailMessage。但是这次,To收件人将仅为内部。

还要注意,这次不需要PSCredential。

## 构建参数
$mailParams = @{
    SmtpServer                 = '<tenant>.mail.protection.outlook.com'
    Port                       = '25'
    UseSSL                     = $true   
    From                       = '[email protected]'
    To                         = '[email protected]'
    Subject                    = "Direct Send $(Get-Date -Format g)"
    Body                       = 'This is a test email using Direct Send'
    DeliveryNotificationOption = 'OnFailure', 'OnSuccess'
}

## 发送电子邮件
Send-MailMessage @mailParams
Direct Send email

摘要

您可以看到Office 365提供了两种不同的发送电子邮件的选项。在本文中,我们以PowerShell为例进行演示。但您不必使用PowerShell。只要您的应用程序或编程语言支持TLS身份验证,您可以使用任何您喜欢的方法。

进一步阅读

Source:
https://adamtheautomator.com/office-365-direct-send/