为了完善公司的整体邮件质量,博主通过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. python深浅拷贝&垃圾回收&上下文管理(with语句)

    深浅拷贝 在Python中使用copy模块用于对象的拷贝操作. 该模块提供了两个主要的方法:浅拷贝 copy.copy() 深拷贝 copy.deepcopy() 1.浅拷贝(copy) 浅拷贝: 不 ...

  2. SpringBoot源码分析(一)@SpringBootApplication解析

    @SpringBootApplication解析 三层注解 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(exclu ...

  3. MySQL:REPLACE函数的使用

    原文链接 REPLACE函数功能 REPLACE(columnName, search_str, replace_str) 查找columnName字段中所有search_str,并替换为replac ...

  4. AndroiBugs Android漏洞扫描器

    Download Address:https://github.com/AndroBugs/AndroBugs_Framework Usage for Unix/Linux: ####To run t ...

  5. 第九周Java实验作业

    实验九 异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. Ja ...

  6. TensorFlow 多元线性回归【波士顿房价】

    1数据读取 1.1数据集解读 1.2引入包 %matplotlib notebook import tensorflow as tf import matplotlib.pyplot as plt i ...

  7. 概率-Knight Probability in Chessboard

    2018-07-14 09:57:59 问题描述: 问题求解: 本题本质上是个挺模板的题目.本质是一个求最后每个落点的数目,用总的数目来除有所可能生成的可能性.这种计数的问题可以使用动态规划来进行解决 ...

  8. Building Applications with Force.com and VisualForce (DEV401) (二二):Visualforce Componets (Tags) Library Part II

    Dev401-023:Visualforce Pages: Visualforce Componets (Tags) Library Part II   Apex:pageBlockTable1.A ...

  9. 一个完整的机器学习项目在Python中的演练(二)

    大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习.但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中.就像你的脑海中已经有了一块块"拼 ...

  10. 200行PYTHON代码实现贪吃蛇

    200行Python代码实现贪吃蛇 话不多说,最后会给出全部的代码,也可以从这里Fork,正文开始: 目前实现的功能列表: 贪吃蛇的控制,通过上下左右方向键: 触碰到边缘.墙壁.自身则游戏结束: 接触 ...