使用Office 365直接發送和PowerShell發送郵件

你知道你可以使用Office 365和PowerShell发送电子邮件吗?在这篇文章中,您将学习如何使用Office 365直接发送和PowerShell的Send-MailMessage cmdlet发送电子邮件。

如果您想深入了解如何使用PowerShell发送电子邮件,请查看这篇关于Send-MailMessage的深入教程

Office 365直接发送与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驗證提交一樣,直接發送允許您使用任何寄件人地址。此外,寄件人地址必須來自您驗證過的接受域之一。

直接發送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' # 如果不使用TLS,则为'25'
    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/