其实在企业邮件平台管理过程中,企业邮箱管理员经常会被各种各样的邮箱问题所困扰,而困扰最大的除了服务器规划不当带来的后期服务器维护的困难外,还有最致命也是最让邮件管理员着急的事情,那就是企业邮箱经常被一些国际反垃圾邮件组织列为黑名单,也许,很多人会在想,如果是列为了黑名单,那么直接进行申诉,释放就可以了,这个回答其实也勉强可以算是对的,但是从申诉到释放,其实也是需要等待一个时间的,那么这时出现大批量的用户反映,我个人认为这其实也是邮件平台不稳定的一个体现,做为管理员,则必须要了解被列为黑名单的根本原因,当然最核心的还是需要在规划邮件平台架构时,就能够合理规划系统结构及网络结构才能有一个更为稳定的邮件平台结构,在下面呢,我就分享一个较为不常见的典型案例。
在之前一段时间,在处理一些邮件技术支持工作时,遇到了企业邮箱服务器频繁被国际反垃圾联盟列为黑名单的问题,而且频率极高,基本一天至少3次,这其实从3次的意义来看,这已经不是单纯的服务器故障,很有可能我们对外部提供的公网邮件地址已经被反垃圾联盟盯上啦,那么我们是每天3次,甚至是凌晨也在向反垃圾联盟申诉呢?还是自己想想哪里出现了问题?当然,我相信,偶尔出一次被列黑名单,申诉后问题解决,那还是正常的,毕竟有时反垃圾联盟也会有误判嘛。而这次出现的问题,则很明显不是误判哦,所以还是需要找到根本原因的。
在这次故障中,我用了一个最为简单的方式,也是之前处理这类问题时的一个经验性方法,反查telnet其它公司的邮件服务器时,返回值是多少?这个返回值当然指你去telnet对端邮件服务器IP时,对端回显你的发起连接的IP是多少?
其实在当时有人就提出了质疑,你去telnet对端邮件平台有意义吗?当然是有意义的,从排查思路来看,Exchange服务器各项服务正常,网络链路通,那么还有哪里会有问题,如果有实施Exchange经验的话,会知道,最后一步那是进行端口映射。所以我们不妨来看看端口映射情况,在向网络工程师查询映射前,你不妨像我一样做下面这样一件事情。
1.在办公网平台下,telnet其它支持telnet 回显的邮件组织,查看回显回来什么地址。
2.在邮件网关或Exchange 器服务器上telnet支持telnet回显的,邮件组织,查看回显回来是什么地址。
为什么要做这2步呢?如果两者回显是不同地址还好,但是如果两者回显均为邮件网关地址呢?这就是有问题的,毕竟我们发布25端口一般也只是对邮件平台,而如果办公网随意一台机器telnet其它邮件组织邮件服务器,都是邮件网关地址,那么意味着什么,相信我们邮件管理员都很清楚的。
最终也通过网络映射看到并验证了我的分析结果,当时网络层面为了简单,直接把整个办公网地址25端口映射为了邮件网关公网地址,为此,我要求重新做了映射,保证邮件公网IP仅用于邮件网关,不得做于其它映射使用,调整映射服务器范围后,观察了1个月,没有再出现被反垃圾联盟拦截的问题。
以上也只是我在分析这类被国际反垃圾邮件联盟列为黑名单时的个列处理方法,希望对有类似问题的博友看完能有一些帮助。
本文出自 "笨鸟先飞" 博客,请务必保留此出处http://tingdongwang.blog.51cto.com/1056852/1640227
最近公司来了一个陕北的实习妹子,据说家里是开矿的,人长得一般,但很有气质。开矿的,当然钱很多了。以前在大学有个同学,家里是开油田的,有节毛概课,老师说西安的房价都是陕北人轰起来的,西安人都怨陕北人。我这个同学听了不开心了,周末直接在东西南北各买一套。牛逼啊,让你老师多嘴。这几天周围的同事心思都在这个姑娘身上,装作喝咖啡过去瞄一眼,或者站起来瞅瞅背影。IT爷们真的是空虚,IT界无美女啊,还是吉日嘎啦说的好,公司有美女,可以提升爷们的战斗力。
OK,今天我们来看一下新闻审核界面,本来这节是要说ueditor上传图片到mongoDB,但是最近实在精力有限,先放放,稍后再上博客。我们先看一下界面,提提神。
这个界面上面部分是查询,采用响应式布局方式。当在手机或者pad的浏览器上的时候,依然能够正常显示并使用。
OK,我们今天主要看的不是界面,还是看功能的实现。
首先先看一下查询功能,查询有个新闻类别的下拉列表,后台Action代码如下
[HttpGet] public JsonResult GetNewsTypeList() { List<NewsTypesEntity> newsTypeEntityList = NewsMngBiz.GetInstance().GetNewsTypes(); newsTypeEntityList.Insert(0, new NewsTypesEntity() { TransactionNumber = null, NewsTypeName = CommonResouce.DefaultSelectText }); return Json(newsTypeEntityList, JsonRequestBehavior.AllowGet); }
OK,接下来我们就要看界面了
@{ Layout = null; } <div ng-app="newsAuditModule" ng-controller="newsAuditController" id="div_newsAudit" class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title"> <img class="img-panel-title" src="~/Images/Base/audit.png" /> <b>新闻审核</b> </h3> </div> <div class="panel-body"> <div class="row" style="line-height:30px"> <label for="newsTitle" class="col-sm-2 control-label">新闻标题</label> <div class="col-sm-10"> <input type="text" maxlength="100" class="form-control" id="newsTitle" ng-model="newsTitle" placeholder="请输入新闻标题查询"> </div> </div> <div class="row" style="margin-top: 5px; margin-bottom: 5px; line-height: 30px"> <label for="newsTitle" class="col-sm-2 control-label">新闻类别</label> <div class="col-sm-10"> <select id="newsTitle" class="form-control" ng-model="newsType"> @*<option value="">---请选择---</option>*@ <option ng-repeat="type in NewsTypeList" value="{{type.TransactionNumber}}">{{type.NewsTypeName}}</option> </select> </div> </div> <div class="row" style="line-height:30px"> <label for="newsTitle" class="col-sm-2 control-label">审核状态</label> <div class="col-sm-10"> <select id="newsTitle" class="form-control" ng-model="newsState"> <option value="">---请选择---</option> <option value="-1">未审核</option> <option value="0">未通过</option> <option value="1">通过</option> </select> </div> </div> <div class="row" style="margin-top:10px"> <div class="col-sm-3"> <button type="button" class="btn btn-primary btn-form-width" ng-click="getDataList()">查询</button> </div> </div> <div class="pre-scroll" style="margin-top:10px"> <table class="table table-bordered table-striped table-hover" ng-init="load()"> <tr style="background-color: #428bca; color: white"> <th><input type="checkbox" ng-model="isCheckAll" ng-change="setCheckState()"></th> <th>新闻标题</th> <th>新闻类别</th> <th>创建日期</th> <th>审核状态</th> <th>审核人</th> <th>审核日期</th> <th>操作</th> </tr> <tr ng-repeat="newsEntity in NewsList"> <td><input id="chk_{{newsEntity.TransactionNumber}}" type="checkbox" ng-model="newsEntity.IsChecked" /></td> <td title="{{newsEntity.Title}}">{{newsEntity.SubTitle}}</td> <td>{{newsEntity.InforType}}</td> <td>{{newsEntity.InDate.slice(6,-2)|date:'yyyy-MM-dd'}}</td> <td style="color:{{ newsEntity.Color }}">{{newsEntity.AuditStatus}}</td> <td>{{newsEntity.AuditUserName}}</td> <td>{{newsEntity.AuditDate.slice(6,-2)|date:'yyyy-MM-dd'}}</td> <td> <span style="cursor:pointer;"> <a href="#"><img title="浏览" alt="" src="~/Images/Base/preview.png" class="img-table-column" /></a> <a href="#"><img title="审核" ng-click="auditModalShow(newsEntity)" alt="" src="~/Images/Base/key.png" class="img-table-column" /></a> </span> </td> </tr> </table> </div> <div class="btn-group dropup"> <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> 批量操作<span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> <li><a href="#" ng-click="batchOperation('A')">批量通过</a></li> <li class="divider"></li> <li><a href="#" ng-click="batchOperation('D')">批量删除</a></li> </ul> </div> </div> <div class="modal fade" id="newAuditModal" tabindex="-1" role="dialog" aria-labelledby="auditModalTitle" aria-hidden="true" data-backdrop="static"> <div class="modal-dialog"> <div class="modal-content" style="width:550px"> <div class="modal-header" style="background-color: #009966;height:45px;line-height:45px"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> × </button> <h5 class="modal-title" id="auditModalTitle" style="color:white"> 新闻审核 </h5> </div> <div class="modal-body"> <div class="form-horizontal"> <div class="form-group"> <label class="col-md-3" for="labTitle">新闻标题:</label> <div class="col-md-9"> <label id="labTitle"></label> </div> </div> <div class="form-group"> <label class="col-md-3">审核结果:</label> <div class="col-md-9"> <input type="radio" name="radAuditResult" ng-change="setAuditResaonEditable()" value="1" checked ng-model="AuditResult"> 通过 <input type="radio" name="radAuditResult" ng-change="setAuditResaonEditable()" value="0" ng-model="AuditResult" style="margin-left:10px"> 不通过 </div> </div> <div class="form-group"> <label class="col-md-3" for="div_reason">未通过原因:</label> <div class="col-md-9"> <div id="div_reason" style="border: 1px solid #003366; height: 90px; word-break: break-all;max-height:90px;overflow-y:scroll" contenteditable="true"></div> </div> </div> </div>
没有评论:
发表评论