为了完善公司的整体邮件质量,博主通过zabbix监控了exchange的所有微软推荐项目,并写了很多powershell来辅佐,

旨在更大程度上提高整体的邮件性能

这篇文章主要是讲通过powershell监控邮件队列,因为一些历史原因,公司有很多业务系统的退信,收件人失效,错误

邮件的退信会长时间停留在提交队列中,默认情况下,这些队列中的邮件会在48小时候被清除,队列中集攒过多邮件也

会一定程度上影响邮件整体性能,且作为一个有轻微强迫症的人,博主也十分希望列队中是十分清爽的

废话不多说,先说该目的的核心命令,其实就以一条十分简单的命令展开“Get-Message”,全部脚本如下


#导入 Powershell Exchange 模块
Add-PSSnapin microsoft.exchange*
#取值所有Exchange Server的名称,创建一个新的数组
$computername = (Get-TransportService).name
$sum = 0 #将失败队列总数归0
$array=@()
[System.Collections.ArrayList]$arraylist = $array
#定义字符类型
[String] $body = $null
#输出HTML报告
$report = "d:\QueueCheck\QueueCheck.html"
if((test-path $report) -like $false)
{
new-item $report -type file
}
#创建HTML
$msg = $report
Clear-Content $msg
Add-Content $msg "<html>"
Add-Content $msg "<body>"
Add-Content $msg "<table width='60%' border='1' cellspacing='0' align='center'>"
Add-Content $msg "<tr><td colspan='2' align='center'><font face='tahoma' color='#003399' size='4'><strong>Error Check</strong></font></td></tr>"
Add-Content $msg "<tr bgcolor='skyblue'>"
Add-Content $msg "<td width='60%' align='center'><B>Server Name</B></td>"
Add-Content $msg "<td width='40%' align='center'><B>Error Count</B></td>"
Add-Content $msg "</tr>"
#检查每一个Server的队列状态
foreach($name in $computername){
#HTML 另起一行
Add-Content $msg "<tr align='center'>"
Add-Content $msg "<td>$name</td>"
$count = (Get-Message -ResultSize Unlimited -Queue $name\submission | where {$_.subject -like "*Error*" -and $_.LastError -ne $null}).count
$null = $arraylist.Add($count)
$sum+=$count
 
if($count -gt 200){
Add-Content $msg "<td bgcolor= 'Red' align=center><B>$count</B></td>"
}
else{
Add-Content $msg "<td>$count</td>"
}
Add-Content $msg "</tr>"
}
$max = ($arraylist | Measure-Object -Maximum).Maximum
#关闭HTML
Add-Content $msg "</table>"
Add-Content $msg "</body>"
Add-Content $msg "</html>"
#定义邮件内容
$body = Get-Content $report
#发送邮件
if($max -gt 200 -or $sum -gt 1500){
Send-MailMessage -SmtpServer xxx -From xxx -To xxx -Cc xxx -Subject QueueCheck -BodyAsHtml $body
}
#判断ErrorQueue状态
if ($max -gt 200 -or $sum -gt 1500)
{
    $status = "Error"
}
else {
    $status = "OK"
}
#$message = "Total=$sum,Max=$max,Status=$status"
#连接MySQL
[void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data")
$mySQLDataDLL = "C:\mysql\MySql.Data.dll"
[void][system.reflection.Assembly]::LoadFrom($mySQLDataDLL)
$Server = "xxx.xxx.xxx.xxx"
$Database = "xxx"
$user = "xxx"
$Password = "xxx"
$charset = "utf8"
$connectionString = "server=$Server;uid=$user;pwd=$Password;database=$Database;charset=$charset;SslMode=none"
$connection = New-Object MySql.Data.MySqlClient.MySqlConnection($connectionString)
$connection.Open()
#执行MySQL
$insert = "INSERT INTO sys_detect (name,status,type) VALUES('ErrorQueue','$status','queue');"
$insertcommand = New-Object MySql.Data.MySqlClient.MySqlCommand
$insertcommand.Connection = $connection
$insertcommand.CommandText = $insert
$insertcommand.executenonquery()
#关闭连接
$connection.Close()
 
其实是一个很简单的powershell脚本,同时有制作html的用法,powersehll操作mysql的用法,powershell发送邮件的用法
 
效果图如下:

如果你希望进一步调整html的样式,可以通过http://www.w3school.com.cn/html/ 进行一定的学习,然后在线测试

Powershell检查邮件队列设置阈值,通过html形式进行邮件告警的更多相关文章

  1. 管理 sendmail 的邮件队列

    邮件队列是存储 sendmail 命令传送的邮件消息数据和控制文件的目录.缺省情况下,邮件队列是 /var/spool/mqueue. 邮件消息可能由于很多原因而排入队列. 例如: sendmail  ...

  2. Confluence 6 邮件队列

    需要发送的电子邮件将会在邮件队列中进行等待,Confluence 的邮件队列每分钟刷新一次.Confluence 的管理员也可以手动的刷新邮件队列中等待发送的消息. 如果在发送的时候出现了错误,那么出 ...

  3. Postfix常用命令和邮件队列管理(queue)

    本文主要介绍一下postfix的常用命令及邮件队列的管理: Postfix有以下四种邮件队列,均由管理队列的进程统一进行管理: maildrop:本地邮件放置在maildrop中,同时也被拷贝到inc ...

  4. 如何设置outlook实现自动秘密抄送邮件的功能?

    很多朋友会发现虽然在家里同步了公司的邮箱可以正常收发邮件,可是每当使用家里的outlook发送相关邮件的时候,在公司的邮箱里找不到相关的发件记录,只能同步收件箱,而不能同步发件箱应该是比较让人困扰的问 ...

  5. 系统中没有邮件客户端设置autoLink=email会挂掉的问题

    TextView的autoLink属性为我们提供了很大的便利性,当文本中有网址,邮箱或电话的时候可以让我们方便地执行打电话发邮件等动作,不过也有一些问题,比如说设置autoLink包含email属性, ...

  6. Fair Scheduler 队列设置经验总结

    Fair Scheduler 队列设置经验总结 由于公司的hadoop集群的计算资源不是很充足,需要开启yarn资源队列的资源抢占.在使用过程中,才明白资源抢占的一些特点.在这里总结一下. 只有一个队 ...

  7. Ubuntu16.04 + Zabbix 3.4.7 邮件报警设置

    部署了Zabbix,需要配置邮件报警,在网上找了一些教程,大多是是用的CentOS + Zabbix 2.x版本的,而且还要写脚本,感觉太麻烦了,所以自己结合其他文章摸索了一套配置方法. 先说一下环境 ...

  8. cacti报警邮件的设置

    众所周知,用Linux系统自带的sendmail发送邮件是有限制的,可能对有些邮箱无法正常发送,导致报警邮件不能够及时发送到,因此就可能会产生不必要的麻烦!对此,我们可以用其他方法来发送邮件,就是在c ...

  9. Asp.Net Core 快速邮件队列设计与实现

    发送邮件几乎是软件系统中必不可少的功能,在Asp.Net Core 中我们可以使用MailKit发送邮件,MailKit发送邮件比较简单,网上有许多可以参考的文章,但是应该注意附件名长度,和附件名不能 ...

随机推荐

  1. sql 语句系列(多表之链)[八百章之第三章]

    新增连接查询而不影响其他连接查询 请看图: 这种情况我们一般会使用左连接的方式. select e.ENAME,d.LOC,eb.RECEIVED from emp e join dept d on( ...

  2. Uniapp使用GoEasy实现websocket实时通讯

    Uniapp作为近来最火的移动端开发技术,一套代码,可以打包成Android/iOS app和各种平台的小程序,可谓是没有最方便只有更方便. GoEasy上架DCloud Uniapp插件市场已经有一 ...

  3. SpringMVC框架——常用注解

    @RequestMapping Spring MVC 通过 @RequestMapping 注解将请求与业务方法进行映射,在方法定义处,在类定义都可以添加该注解. 常用参数: 1.value:指定请求 ...

  4. iOS/macOS推荐个高效苹果开发工具, JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,支持Swift/Objective-C,极速转换

    CCJSON 是一款运行在macOS上 JSON 转模型代码工具,不再为复杂JSON数据写模型而烦恼,可识别嵌套模型,字典/数组,支持Swift/Objective-C,操作方便,极速转换.下载 效果 ...

  5. Mol Cell Proteomics. | 用于鉴定新型融合转录本及其在癌细胞中的潜在翻译产物的多功能蛋白质组基因组学工具FusionPro

    期刊:Molecular & Cellular Proteomics 发表时间:June 17, 2019 DOI:10.1074/mcp.RA119.001456 分享人:任哲 内容与观点: ...

  6. NIO的原理和文件读入读出及图片拷贝的使用

    1.NIO的简介        java.nio 全称 java non-blocking IO 是jdk1.4之后出现的 New IO        为所有的原始类型(boolean除外)提供了缓存 ...

  7. 项目中用到了Redis分布式锁,了解一下背后的原理

    前言 以前在学校做小项目的时候,用到Redis,基本也只是用来当作缓存.现在博主在某金融平台实习,发现Redis在生产中并不只是当作缓存这么简单.在我接触到的项目中,Redis起到了一个分布式锁的作用 ...

  8. elasticsearch基础及在Python中的简单使用

    目录 一. 安装java环境与elasticsearch.kibana 二. elasticsearch.kibana的部分文件说明 三. Kibana的Dev tools中ES的简单命令 四. ES ...

  9. web----HTML(WEB概述)

    ## web概述: *JavaWeb: 什么是web,即JavaWeb(使用Java语言开发基于互联网的项目). *软件架构: 1.C/S:Client/Server 客户端/服务器端 *在用户本地有 ...

  10. 微信小程序api封装

    写多 之后,吸取之前的经验,瞎写了一个简单的封装api,有幸看到的朋友,就随便看看哈,如果能给到你帮助就一直棒了,额呵呵呵! 新建constant.js和api.js文件 在constant.js中统 ...