Exchange 2013 PowerShell发送SMTP邮件

作为一个Exchange管理员,我们可能需要使用PowerShell脚本自动化的发送电子邮件。下面一起学习下如何使用PowerShell脚本在你的组织中发送SMTP电子邮件信息。

怎么做到这点呢?

PowerShell V2以及后续版本都提供了核心命令可以通过SMTP发送电子邮件信息。使用下面的语法可以发送一份电子邮件信息:

Send-MailMessage -To [email protected] `

-From [email protected] `

-Subject "Test E-mail" `

-Body "This is just a test" `

-SmtpServer mail.corp.robin.com

使用张三的账号登陆OWA看看邮件信息:

那么脚本是如何执行的呢?

在PowerShell V1,Send-MailMessage命令是不存在的。在早期Exchange 2007 SP2和PowerShell V2支持之前,我们需要引用.Net Framework里的System.Net.Mail类库去发送SMTP邮件信息。对于一般的管理员,因为没有编程经验,在使用.Net类还是比较困难的。好消息就是Send-MailMessage命令利用了这些相同的.Net类库,允许我们创建丰富的电子邮件,可以包含一个或多个附件,使用HTML格式化消息体,支持消息优先等级等等。下面列一下这些有用的参数:

可以使用帮助系统查看帮助信息:

Get-Help Send-MailMessage -full

参数

-Attachments <String[]>

Specifies the path and file names of files to be attached to the e-mail message. You can use this parameter or pipe the paths and file names to Send-MailMessage.

是否必需?                    False

位置?                        named

默认值

是否接受管道输入?            true (ByValue)

是否接受通配符?              False

-Bcc <String[]>

Specifies the e-mail addresses that receive a copy of the mail but are not listed as recipients of the message.

Enter names (optional) and the e-mail address, such as "Name <[email protected]>".

是否必需?                    False

位置?                        named

默认值                None

是否接受管道输入?            false

是否接受通配符?              False

-Body <String>

Specifies the body (content) of the e-mail message.

是否必需?                    False

位置?                        3

默认值                None

是否接受管道输入?            false

是否接受通配符?              False

-BodyAsHtml [<SwitchParameter>]

Indicates that the value of the Body parameter contains HTML.

是否必需?                    False

位置?                        named

默认值                False

是否接受管道输入?            false

是否接受通配符?              False

-Cc <String[]>

Specifies the e-mail addresses to which a carbon copy (CC) of the e-mail message is sent. Enter names (optional

) and the e-mail address, such as "Name <[email protected]>".

是否必需?                    False

位置?                        named

默认值                None

是否接受管道输入?            false

是否接受通配符?              False

-Credential <PSCredential>

Specifies a user account that has permission to perform this action. The default is the current user.

Type a user name, such as "User01" or "Domain01\User01". Or, enter a PSCredential object, such as one from the

Get-Credential cmdlet.

是否必需?                    False

位置?                        named

默认值                Current user

是否接受管道输入?            false

是否接受通配符?              False

-DeliveryNotificationOption <DeliveryNotificationOptions>

Specifies the delivery notification options for the e-mail message. You can specify multiple values. "None" is

the default value.  The alias for this parameter is "dno".

The delivery notifications are sent in an e-mail message to the address specified in the value of the To parame

ter.

Valid values are:

-- None: No notification.

-- OnSuccess: Notify if the delivery is successful.

-- OnFailure: Notify if the delivery is unsuccessful.

-- Delay: Notify if the delivery is delayed.

-- Never: Never notify.

是否必需?                    False

位置?                        named

默认值                "None"

是否接受管道输入?            false

是否接受通配符?              False

-Encoding <Encoding>

Specifies the encoding used for the body and subject. Valid values are ASCII, UTF8, UTF7, UTF32, Unicode, BigEn

dianUnicode, Default, and OEM. ASCII is the default.

是否必需?                    False

位置?                        named

默认值                ASCII

是否接受管道输入?            false

是否接受通配符?              False

-From <String>

Specifies the address from which the mail is sent. Enter a name (optional) and e-mail address, such as "Name <s

[email protected]>". This parameter is required.

是否必需?                    True

位置?                        named

默认值                None

是否接受管道输入?            false

是否接受通配符?              False

-Port <Int32>

Specifies an alternate port on the SMTP server. The default value is 25, which is the default SMTP port. This p

arameter is available in Windows PowerShell 3.0 and newer releases.

是否必需?                    False

位置?                        named

默认值                25

是否接受管道输入?            false

是否接受通配符?              False

-Priority <MailPriority>

Specifies the priority of the e-mail message. The valid values for this are Normal, High, and Low. Normal is th

e default.

是否必需?                    False

位置?                        named

默认值                Normal.

是否接受管道输入?            false

是否接受通配符?              False

-SmtpServer <String>

Specifies the name of the SMTP server that sends the e-mail message.

The default value is the value of the $PSEmailServer preference variable. If the preference variable is not set

and this parameter is omitted, the command fails.

是否必需?                    False

位置?                        4

默认值                $PSEmailServer

是否接受管道输入?            false

是否接受通配符?              False

-Subject <String>

Specifies the subject of the e-mail message. This parameter is required.

是否必需?                    True

位置?                        2

默认值                None

是否接受管道输入?            false

是否接受通配符?              False

-To <String[]>

Specifies the addresses to which the mail is sent. Enter names (optional) and the e-mail address, such as "Name

<[email protected]>". This parameter is required.

是否必需?                    True

位置?                        1

默认值                None

是否接受管道输入?            false

是否接受通配符?              False

-UseSsl [<SwitchParameter>]

Uses the Secure Sockets Layer (SSL) protocol to establish a connection to the remote computer to send mail. By

default, SSL is not used.

是否必需?                    False

位置?                        named

默认值                False

是否接受管道输入?            false

是否接受通配符?              False

更多示例参考如下:

当使用PowerShell发送电子邮件消息时,我们需要指定一个SMTP服务器以提交消息。除非在你的环境中使用恶劣某种类型的邮件中继服务器,那么你会希望使用你Exchange组织中的集线器传输服务器。但是,Exchange服务器时不允许工作站和不受信任的服务器中继邮箱消息。那么我们可以使用脚本让机器传递邮件。

在PowerShell V2及后续版本中,提供了变量$PSEmailServer,可以分配一个SMTP服务器的名称或地址。当你定义这个变量,那么你在使用Send-MailMessage命令发送邮件时不需要使用SmtpServer参数,当然我们可以把变量赋值并加入到我们的配置文件中,那么将会持续保存在所有的Shell会话中。

发送带有附件的邮件

也许,你想编写一个脚本生成一个文本文件或CSV文件的报告通过电子邮件进行发送。那么我们可以结合使用Send-MailMessage命令,并加参数-Attachment指定附件。例如,我们先来看看怎么发送一个现有的文件作为邮件附件,然后再来看如何生成一个文件并通过邮件附件进行发送,先来看看怎么发送一个附件:

Send-MailMessage -To [email protected] `

-From [email protected] `

-Subject "Mailbox Report for $((Get-Date).ToShortDateString())" `

-Body "Please review the attached mailbox report." `

-Attachments c:\report01.csv `

-SmtpServer mail.corp.robin.com

回到收件人邮箱查看信息,可以看到邮件中有了附件:

我们应该注意到,需要提供附件的路径和文件名到-Attachment参数。我们可以用逗号分隔文件发送多个文件:

回到OWA看看信息,有三个附件:

发送命令输出信息到消息体中

上面的例子中,我们是先导出输出信息到一个文件,然后再把这个文件附加到邮件附件中进行发送。下面我们看一个例子如何将这些信息添加到电子邮件体中。在这个命令中,我们将发送组织架构中邮箱使用前10的信息。命令如下:

[string]$report = Get-MailboxDatabase |

Get-MailboxStatistics| ?{!$_.DisconnectDate} |

Sort-Object TotalItemSize -Desc |

Select-Object DisplayName,Database,TotalItemSize -First 10 |

ConvertTo-Html

Send-MailMessage -To [email protected] `

-From [email protected] `

-Subject "Mailbox Report for $((Get-Date).ToShortDateString())" `

-Body $report `

-BodyAsHtml `

-SmtpServer mail.corp.robin.com

看看邮件体:

在这个例子中,我们应该注意到,我们将报告输出到一个变量$report中,而且将$report的类型强制为String类型,因为我们后续我们需要使用-body参数将这些信息附加到有邮件体中。你应该注意到这里使用了ConvertTo-Html命令将对象转换为一个HTML文档,我们可以将这些信息通过-BodyAsHtml开关参数发送这些报告信息到一个HMTL格式的邮件消息中。

时间: 2024-10-28 16:08:41

Exchange 2013 PowerShell发送SMTP邮件的相关文章

Exchange 2013 PowerShell管理联系人&通讯组&资源邮箱

管理联系人 创建联系人,使用如下语法: New-MailContact -Alias rjones ` -Name "Rob Jones" ` -ExternalEmailAddress [email protected] ` -OrganizationalUnit sales 已启用邮箱的用户可以使用如下语法: New-MailUser -Name 'John Davis' ` -Alias jdavis ` -UserPrincipalName [email protected]

Exchange 2013 PowerShell新建&修改&删除邮箱

在我们日常使用Exchange Management Shell最多的应该就是邮箱的管理了.在这一节中,将主要介绍下在Exchange中使用语法命令在组织中创建.更新和删除邮箱. 先来看一个示例: 1.  我们可以使用Exchange Management Shell创建一个启用了邮箱功能的AD账户.语法如下: $password = ConvertTo-SecureString -AsPlainText abc.123 -Force New-Mailbox -UserPrincipalName

exchange 2013启用反垃圾邮件禁止发件人为空

今天遇到一个客户经常收到发件人为空的邮件.要阻止发件人为空的邮件需要使用exchange里面的反垃圾邮件功能. 客户使用的邮件环境是两个exchange 2013的服务器. 默认exchange 2013是没有启用反垃圾邮件的功能的所以要实现这个功能需要以下的步骤 1 启用反垃圾邮件功能 2 重启传输服务 3 指定SMTP服务器即是启用了反垃圾邮件功能的exchange服务器 4 启用发件人筛选 5 禁用发件人为空的邮件. 这里不上图了>>>>>>> 1 首先以管

Exchange 2013 PowerShell导出报告至文本和CSV文件

Exchange Management Shell的一个好处就是,可以給我们提供详细可自定义的报告.通过Exchange Management数以Shell和Windows系统的PowerShell提供的数以百计的Get-*命令,报告功能是相当强大可自定义的.在这一节中,将通过Exchange环境通过命令导出报告到CSV和文本文件中. 怎么做呢? 导出输出结果到一个文本文件,可以使用Out-File命令.生成特定数据库下的邮箱报告到一个文本文件,可以使用如下命令: Get-Mailbox –Da

Exchange 2013 PowerShell 传输文件及并行管道

自从Exchange 2013管理Shell命令是通过远程PowerShell会话执行,导入和导出文件需要一个新的特定参数.大概有上百个Shell命令需要用到,那么这一小节,我们就看看如何使用这些参数通过远程Shell连接进行传输文件的. 传输文件工作方式: 假如你正在当前活动目录站点中创建一个边缘订阅中心到传输服务器.当你在边缘服务器上生成了xml文件后,你可以通过New-EdgeSubscription命令,具体语法如下: [byte[]]$data = Get-Content -Path

Exchange 2013 PowerShell手动配置远程PowerShell连接

介绍 在Exchange 2007的时候,微软就推出了一套全新的基于Shell的管理工具:PowerShell V1,而且所有的图形化界面也是建立在这种技术之上的. 到了Exchange 2010,PowerShell更紧密的集成在产品中,Exchange 2010使用的是PowerShell V2,很大程度上依赖于其新的远程架构.即使你的服务器在本地或云端,都可以方便的使用这套管理工具. 在Exchange 2013中,使用的是PowerShell V3,有了更多的命令以及核心功能改变.在20

为Exchange 2013设置防欺骗邮件

最近在Exchange 2013项目中遇到一个问题,就是在公司外网使用公司域账号在OUTLOOK中设置P0P3收发邮件方式,不需要这个域账号的密码就可以往公司内部发送邮件,使用了之前在Exchange 2010环境中做过的移除接收连接器的AD权限的解决方案,依旧无法解决问题,后经过测试发现可以使用Exchange 2013自带的防垃圾邮件功能,防止欺骗邮件进入公司内部. 默认情况下,Exchange 2013并没有为我们开启这一功能,我们可以使用Exchange PowerShell开启: 在E

Exchange 2013 PowerShell数组和哈希表

示例: 你可以使用一个变量来存放一个数组,通过这个数组对变量分配多个值,在值之间,值需要用分隔号隔开,下面来创建一个示例: $servers = "EX1","EX2","EX3" 创建一个空的哈希表,可以使用如下语法: $hashtable = @{} 创建完哈希表后,我们可以对它进行赋值: $hashtable["server1"] = 1 $hashtable["server2"] = 2 $hash

Exchange 2013 PowerShell关键概念之一

介绍 当你的组织决定升级到Exchange Server 2013,去体验一些新的功能,如集成的电子邮件存档.发现功能以及高可用功能.不管你是否喜欢,你应该意识到PowerShell已经是Exchange服务器管理工具的一部分,而且你需要去学习一些基本脚本知识,从而建立一些脚本管理Exchange Server.这本书就是关于这方面的介绍.在这一章,将介绍一些PowerShell的一些核心概念,这些概念讲方便你学习这本书中提到的一些实例知识.当然,假如你的PowerShell比较熟悉,可以跳过本