为了完善公司的整体邮件质量,博主通过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. 从发布订阅模式入手读懂Node.js的EventEmitter源码

    前面一篇文章setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop详细讲解了浏览器和Node.js的异步API及其底层原理Event Loop.本文会讲一下不 ...

  2. Dubbo反序列化漏洞(CVE-2019-17564) 重现

    1. 下载官方 demo 代码(暴出的漏洞是 http 协议的,故使用 http 的 demo 来重现)https://github.com/apache/dubbo-samples/tree/mas ...

  3. idea的ktorm框架代码生成器插件

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  4. [SQL]CASE WHEN的用法及总结

    CASE WHEN的用法及总结 一.已知数据按照另外一种方式进行分组,分析 二.用一个SQL语句完成不同条件的分组 三.在Check中使用Case函数 四.根据条件有选择的UPDATE 五.两个表数据 ...

  5. Spring Cloud 系列之 Netflix Zuul 服务网关

    什么是 Zuul Zuul 是从设备和网站到应用程序后端的所有请求的前门.作为边缘服务应用程序,Zuul 旨在实现动态路由,监视,弹性和安全性.Zuul 包含了对请求的路由和过滤两个最主要的功能. Z ...

  6. FtpServer穿透内网访问配置踩笔记

    FtpServer穿透内网访问配置踩笔记 引言 FtpServer是服务器文件远程管理常用方式. 以前在局域网配置Ftp服务器以及使用公网上的Ftp服务均未碰到问题,固未对Ftp传输进行深入了解. 然 ...

  7. 深入理解NIO(二)—— Tomcat中对NIO的应用

    深入理解NIO(二)—— Tomcat中对NIO的应用 老哥行行好,转载和我说一声好吗,我不介意转载的,但是请把原文链接贴大点好吗 Tomcat大致架构 先贴两张图大致看一眼Tomcat的架构 Tom ...

  8. TensorFlow报错module 'tensorflow' has no attribute 'xxx'解决办法

    原因:TensorFlow2.0版本修改了许多函数名字 tf.sub()更改为tf.subtract() tf.mul()更改为tf.multiply() tf.types.float32更改为tf. ...

  9. 「SpringBoot」如何优雅地管理SpringBoot项目

    本文主要讲述一下如何优雅地管理SpringBoot项目. 背景 课堂上,当小明形如流水地回答完沐芳老师提出来的问题时,却被至今没有对象的胖虎无情嘲讽了? 沐芳老师:小明,你平时是如何启动.停止你的Sp ...

  10. B 【ZJOI2007】时态同步

    时间限制 : - MS   空间限制 : 265536 KB  评测说明 : 1s 256m 问题描述 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 ...