[玩转系统] 使用 PowerShell 脚本向 Office 365 发送电子邮件 |第 1 部分#2
作者:精品下载站 日期:2024-12-14 20:39:45 浏览:13 分类:玩电脑
使用 PowerShell 脚本向 Office 365 发送电子邮件 |第 1 部分#2
在以下两篇文章系列中,我们回顾主题 - 如何使用“发送电子邮件 PowerShell 脚本”,该脚本将使用 Office 365 邮件服务器作为他的邮件服务器。使用“发送电子邮件 PowerShell 脚本”的最常见用途是:
- 测试将电子邮件发送到 Office 365 邮件基础设施的过程
- 使用“发送电子邮件 PowerShell 脚本”实现自动化目的,例如发送每日报告。
一般来说,我们有两个主要选项来解决 Office 365 邮件基础设施问题
1. 匿名 SMTP 会话
2. 经过身份验证的 SMTP 或 TLS 会话。
- 在本文中,我们将回顾可以伪装成匿名 SMTP 邮件会话的方法。
- 在下一篇文章中,我们将回顾可伪装为经过身份验证的 TLS 邮件会话的方法,以及如何使用 Windows 任务计划程序组件来使用发送电子邮件 PowerShell 脚本”
寻址 Office 365 邮件服务器的两种主要方法
在开始详细说明如何创建所需的“发送电子邮件 PowerShell 脚本”之前,我们先简要回顾一下客户端寻址 Office 365 邮件服务的方法。
当我们想要寻址Office 365邮件服务器(Exchange Online)时,我们可以使用以下方法之一:
方法 1 - 使用标准匿名 SMTP 会话寻址 Office 365 邮件服务器
一种方法,其中我们的 PowerShell 脚本使用 SMTP 会话(非加密会话)对 Office 365 邮件服务器进行寻址。
SMTP 会话是使用匿名连接创建的。
“匿名连接”的含义是,寻址 Office 365 邮件服务器(PowerShell 脚本)的一方不提供任何用户证书。
优势
此方法的主要好处是我们避免了提供用户凭据的过程。提供凭证的需求对其他任务(例如保护凭证的需求等)是“盲目的”。
缺点
使用匿名连接的主要缺点是邮件服务器无法信任发件人,因为发件人显示为匿名。
大多数情况下,PowerShell 脚本发送的电子邮件将被识别为欺骗电子邮件,因为我们用作“发件人地址”的 Office 365 收件人电子邮件地址未经身份验证。
另外的缺点是,当使用“匿名会话”时,我们无法将电子邮件发送给“外部收件人”,即其电子邮件地址不是由托管我们域的 Exchange Online 服务器托管的收件人。
此问题的解决方案可以通过创建 Exchange Online 传入邮件连接器或在允许的发件人白名单中定义发件人的 10 个电子邮件地址来实现。
如果您需要有关如何创建此类邮件连接器的更多信息,请阅读文章 - 使用标准 SMTP 会话将邮件发送到 Exchange Online |第 2 部分#4
方法 2 - 使用 TLS 会话 + 凭据寻址 Office 365 邮件服务器
一种方法,其中 PowerShell 脚本使用 TLS 会话(加密会话)+ 提供用户凭据(经过身份验证的会话)来寻址 Office 365 邮件服务器。
优势
保护通信通道 - 使用 TLS 协议时,发送电子邮件的主机和 Office 365 邮件服务器之间的通信通道是加密的。
经过身份验证的会话 - 此方法的主要优点是,当我们提供 Office 365 收件人凭据时,Exchange Online 将“发件人”作为受信任的发件人进行关联。
因此,我们不需要在 Exchange Online 服务器端添加额外的配置设置,而且我们可以将电子邮件发送给未托管在 Exchange Online 服务器上的外部收件人。
缺点
如果我们想要使用“发送电子邮件 PowerShell 脚本”作为计划任务,我们需要找到一种解决方案,使 PowerShell 脚本可以访问存储在文件中的所需凭据。
以不安全的格式保存用户凭据(例如密码)是不好的做法!
虽然我们可以将密码添加到不受保护的文本文件(PowerShell 文件)中,但不建议使用此选项。
针对这种“安全需求”的解决方案将通过一种方法来实现,在该方法中,我们创建一个加密的密码文件,并指示“发送邮件PowerShell脚本”访问该加密文件并从该文件中获取所需的密码。
我们需要加密凭据的过程比我们使用没有凭据的 SMTP 会话的场景更复杂。
方法 1 - 使用标准 SMTP 会话寻址 Office 365 邮件服务器
在本节中,我们将回顾如何创建“发送电子邮件 PowerShell 脚本”,它将 Office 365 作为邮件服务器。
在这种情况下,我们将创建一个标准 SMTP 会话,并且不会提供任何用户凭据(匿名连接)。
我们需要完成的任务如下:
- 获取我们将处理的邮件服务器的主机名
我们需要从 Office 365 门户“获取”有关 Exchange Online 主机名的信息,即表示 Office 365 中的公共域名的 MX 记录 | DNS 设置。
- 创建一个 PowerShell 脚本,其中包含所需的参数,例如发件人电子邮件地址、收件人电子邮件地址、邮件服务器名称、邮件服务器端口号、用户凭据等。
- 运行“发送电子邮件 PowerShell 脚本”,并验证电子邮件是否已成功发送到目标收件人。
使用“发送邮件 PowerShell 脚本”的一般准则和要求
在运行“发送邮件 PowerShell 脚本”之前,我们需要确保满足以下要求:
1.PowerShell控制台和Set-ExecutionPolicy
默认情况下,PowerShell 控制台不允许运行 PowerShell 脚本。
如果我们过去没有使用现有的 PowerShell 控制台来运行 PowerShell 脚本,我们需要将 PowerShell 控制台配置为“允许》 PowerShell脚本执行。
如果您需要阅读如何启用 PowerShell 脚本执行的说明,可以使用以下部分中的说明
2. 网络防火墙和出站通信
基于端口 25 的 Exchange Online 服务器的通信通道。
我们需要验证我们的网络防火墙是否包含一条规则,使我们的桌面能够与 Office 365 邮件服务器实现 SMTP 会话(端口 25)。
3. 动态与静态 IP 地址
如果您从使用“动态公共 IP 地址”(例如家庭网络)的桌面运行“发送电子邮件 PowerShell 脚本”,Office 365 邮件服务器(Exchange Online)将不会接受通信请求。
您将需要使用位于网络上的主机,该网络使用静态 IP 地址来表示内部主机。
场景描述
为了能够演示我们如何使用“发送电子邮件 PowerShell 脚本”通过 Office 365 邮件服务器 (Exchange Online) 发送
电子邮件,我们将使用以下场景:
组织信息
- 我们的组织公共域名是 - o365info.com
- 我们的邮件基础设施托管在 Office 365 (Exchange Online) 上。
用户凭据
我们将使用其凭据的 Office 365 收件人是 -[email protected]
源发件人和目标收件人
在我们的场景中,我们将使用以下收件人:
- 发件人电子邮件地址是 - [email protected]
- 收件人电子邮件地址是 - [email protected]
Office 365 邮件基础设施
在 Office 365 环境中,如果我们想要使用 Office 365 邮件服务器的未经身份验证的会话,我们需要找到代表 Office 365 中公共注册域的 Exchange Online 的主机名。
- 在我们的具体场景中,Office 365 邮件服务器的主机名是 - o365info2.mail.protection.outlook.com
注意 - 我们将在下一节中回顾如何获取有关 Exchange Online 主机名的信息。
- 我们使用的通信端口是 25 (TLS)
任务 1#3 - 获取有关代表 Office 365 中公共域名的 MX 记录的主机名的信息
为了能够获取代表我们公共域名的 Office 365 邮件服务器的主机名,我们将使用 Office 365 管理门户。
- 登录 Office 365 管理门户
- 在左侧菜单栏上,选择设置图标
- 选择域名菜单
在我们的场景中,我们将选择通过双击所选域名来查看域名的设置 - o365info.com。
在下面的屏幕截图中,我们可以看到 o365info.com 域的 DNS 设置。
我们将复制 MX 记录中出现的主机名信息。
在我们的场景中,代表我们域的 Exchange Online 主机名是 - o365info2.mail.protection.outlook.com
任务 2#3 - 创建“发送邮件 PowerShell 脚本”
为了能够使用 PowerShell 发送电子邮件,我们将使用 PowerShell 命令:
Send-MailMessage
“发送邮件 PowerShell 脚本”是使用以下 PowerShell 语法创建的:
Send-MailMessage -From <sender> -To <recipient> -Subject "<Subject>" -Body "<Subject>" -SmtpServer <SMTP server> -Port <port number>
在我们的场景中,我们将使用带有以下参数的 PowerShell 命令语法:
Send-MailMessage -From [email protected] -To [email protected] -Subject "Test Email" -Body "Test SMTP Relay Service" -SmtpServer o365info2.mail.protection.outlook.com -Port 25
要创建 PowerShell 脚本,我们可以使用任何文本编辑器。
在我们的示例中,我们使用记事本。
我们将以下信息复制到文本文件中:
PowerShell命令语法包括以下部分:
- 发件人(数字 1) - 我们将使用电子邮件地址 - [email protected] 来代表发件人电子邮件地址。
- 收件人(数字 2) - 我们将使用电子邮件地址 - [email protected] 代表目标收件人电子邮件地址。
- 主题(数字 3)——这是电子邮件主题的文本
- 正文(数字 4)——这是将出现在电子邮件“正文”中的文本
- SmtpServer(数字 5)——这是我们要寻址的邮件服务器的主机名或 IP 地址。在我们的场景中,我们希望将 Exchange Online 服务器称为“邮件服务器”。服务器”。我们将提供从上一步中获得的主机名 - o365info2.mail.protection.outlook.com
- 端口(数字 6)——这是将“侦听”我们的通信请求的邮件服务器的端口号。在 Office 365 环境中,Exchange Online 将使用端口 25 进行侦听。
保存PowerShell脚本文件
下一步是将文本文件保存为 PowerShell 脚本。
我们使用记事本创建 PowerShell 脚本。
在我们的场景中,我们将命名 PowerShell 脚本 - Sendmail-smtp.ps1
- 在“保存类型”部分中,选择选项“所有文件 (*.*)”。
- 另外推荐的选项是,使用 UTF-8 保存 PowerShell 脚本
这不是强制性要求,但根据我的经验,当使用标准格式保存 PowerShell 脚本时,例如作为 ANSI,当我们尝试从 PowerShell 控制台运行 PowerShell 脚本时,我们可能会遇到问题。
在我们的场景中,我们将“发送电子邮件 PowerShell 脚本”保存在我们在驱动器 C: 中创建的 script 文件夹中
任务 3#3 - 运行“发送邮件 PowerShell 脚本”
运行 PowerShell 脚本 |首次配置
默认情况下,PowerShell控制台将阻止我们运行PowerShell脚本。
为了能够运行 PowerShell 脚本,我们需要设置默认的 PowerShell 提取策略。
为了能够更新现有的 PowerShell 提取策略,我们需要以管理员身份运行 PowerShell 控制台。
- 搜索PowerShell图标,右键单击PowerShell控制台图标并选择菜单-以管理员身份运行
出现一个弹出窗口,要求我们批准“以管理员身份运行”任务
- 点击是批准
运行以下 PowerShell 命令:
Set-ExecutionPolicy Unrestricted -force
任务 2#2 - 运行“发送邮件 PowerShell 脚本”
我们将使用以下命令从 PowerShell 控制台运行“发送邮件 PowerShell”:
- 通过导航到 PowerShell 脚本所在的路径来访问 PowerShell 脚本。
在我们的场景中,PowerShell 脚本保存在 C:\script 文件夹中。
键入以下命令:
cd C:\script
- 运行 PowerShell 脚本
要执行 PowerShell 脚本,我们可以编写
脚本的全名 - Sendmail-smtp.ps1 或使用 PowerShell 自动完成功能。
例如,要调用 PowerShell 脚本,我们需要编写以下字符 - .\ ,输入 PowerShell 脚本的第一个字母 (“s“) 并点击 Tab键。
“敲”TAB键后,PowerShell控制台,我们自己完成PowerShell脚本名称的其余部分。
为了验证电子邮件是否成功发送,我们将使用 OWA 邮件客户端登录到管理邮箱。
在下面的屏幕截图中,我们可以看到电子邮件已成功发送到目标收件人,但需要强调的是,电子邮件已发送到
垃圾邮件文件夹。
这是预期结果,因为如上所述,PowerShell 脚本使用 Office 365 收件人的身份 ([email protected])。由于 PowerShell 脚本未提供任何用户凭据,因此 Exchange Online 会将电子邮件视为“可疑电子邮件”,因此,reason 将电子邮件标记为垃圾邮件!
如果您想避免这种情况,建议创建一个 Exchange Online 连接器,它将通过公共 IP 地址识别“源发件人”。
您可以在文章 - 使用标准 SMTP 会话将邮件发送到 Exchange Online | 中阅读有关此配置的更多信息。第 2 部分#4
当前文章系列的下一篇文章
使用 PowerShell 脚本发送电子邮件到 Office 365 并保存加密密码 |第 2 部分#2
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag