SQL Server 2014 Database Mail重复发送邮件特殊案例
在一数据库服务器(Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64))发现有个作业调用Database Mail发送邮件时,有时候出现同样的邮件发送两封的情况,经过详细检查,排除了该作业里面业务逻辑有问题的情况,确实存在重复发送邮件的情况, 检查Database Mail日志,发现在0:00~0.03报“The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (2016-10-27T00:03:21). Exception Message: Cannot send mails to mail server”这类的错误,具体信息如下所示
Date 2016/10/27 0:03:21
Log Database Mail (Database Mail Log)
Log ID 29022
Process ID 11300
Mail Item ID 747326
Last Modified 2016/10/27 0:03:21
Last Modified By sa
Message
The mail could not be sent to the recipients because of the mail server failure. (Sending Mail using Account 1 (2016-10-27T00:03:21). Exception Message: Cannot send mails to mail server. (Mailbox unavailable. The server response was: 5.7.1 Unable to relay for zhouxxxx@xxxx.mail.onmicrosoft.com).
)
从上面日志可以看到是SMTP反馈zhouxxxx@xxxx.mail.onmicrosoft.com这个邮箱无法送达。Mail Item ID就可以查到相关,然后和开发人员一排查,就找到了发送邮件的存储过程,检查发现还是因为其中一个邮箱地址弄错了,导致这些错误出现在Database Mail日志中,当然如果遇到这类错误,必须查看Exception Message: Cannot send mails to mail server后面括号里面详细的报错信息,然后检查、分析确认(Mailbox unavailable. The server response was: 5.7.1 Unable to relay for zhouxxxx@xxxx.mail.onmicrosoft.com). 不同的日志信息,往往反馈不同的问题。也正是这种情况的邮件,都出现了重复发送情况。
手工测试这样的情形(发送给多个收件人,其中一个邮件名称故意写错),发现邮箱确实会收到两封这样的邮件。
EXEC msdb.dbo.sp_send_dbmail @subject='邮件重复发生问题测试——1',@recipients='xxxx@xxxx.microsoft.com;konglb@xxxx.com',@body='test the email send twice problem';
然后我想定位到底是SQL Server版本问题,还是SMTP设置问题,结果测试过程让我更迷惑了
1: 测试了SQL Server 2008配置了同样SMTP服务器的数据库,发现这种情况,邮件不会重复发送。那么可以排除SMTP的一些设置问题导致。
2: 测试了SQL Server 2014相同版本,相同SMTP配置的数据库,发现这种情况,居然不会发生邮件重复发送的情况。呐呢,让人懵了。也就是只有那台环境下才会出现这种情况,其它环境都无法重现。
3: 检查了Database Mail配置信息以及系统参数设置,基本一致,没有区别。也不应该是这个导致邮件重复发送问题。
4: 系统管理员帮忙检查了SMTP服务器的日志,发现重复发送的邮件除了下面Message ID不一样外,其它一样,但是检查msdb.dbo.sysmail_mailitems表里面记录,只有一条发送记录。如下截图所示
网上也搜索了一下,没有看到类似的问题或bug信息。真是一个非常奇怪的问题,好在这个问题解决倒非常简单。 不过问题的诡异倒是让人摸不着头脑。
-------------------------------------------------------------------------分割线-------------------------------------------------------------------------
一网友反馈出现邮件重复发送的原因是因为Database Mail Configuration里面设置为1的缘故,测试了一下,在收件人列表输入一个错误邮箱,确实会收到两封邮件。这个问题解决了!
SQL Server 2014 Database Mail重复发送邮件特殊案例的更多相关文章
- SQL server 表数据改变触发发送邮件
今天遇到一个问题,原有生产系统正在健康运行,现需要监控一张数据表,当增加数据的时候,给管理员发送邮件. 领到这个需求后,有同事提供方案:写触发器触发外部应用程序.这是个大胆的想法啊,从来没写过这样的触 ...
- 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!
看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...
- SQL Server 2014新特性——基数评估(白皮书阅读笔记)
基数评估 目录 基数评估 说明 基数评估准确的重要性 模型假设 启用新的基数评估 验证基数评估的版本 在迁移到新的基数评估前要测试 校验基数评估 偏差问题 需要手动处理的变化 避免因为新的CE造成性能 ...
- SQL Server 2014 新特性——内存数据库
SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...
- 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...
- SQL Server 2014新特性:其他
AlwaysOn 增强功能 SQL Server 2014 包含针对 AlwaysOn 故障转移群集实例和 AlwaysOn 可用性组的以下增强功能: “添加 Azure 副本向导”简化了用于 Alw ...
- SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变
前提 本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段 ...
- SQL Server 2014 Backup Encryption
转载自: Microsoft MVP Award Program Blog 来源:Microsoft MVP Award Program Blog 的博客:https://blogs.msdn.mic ...
- SQL Server 2014新特性-原生备份加密
注:本篇文章是IT68找我的约稿,原文地址:http://tech.it168.com/a2014/0610/1633/000001633147.shtml SQL Server 2014 ...
随机推荐
- 清除Android工程中没用到的资源
项目需求一改再改,UI一调再调,结果就是项目中一堆已经用不到但却没有清理的垃圾资源,不说工程大小问题,对新进入项目的人或看其他模块的代码的人来说,这些没清理的资源可能也可能会带来困扰,所以最好还是清理 ...
- Struts2+Spring+Hibernate框架整合总结详细教程
一.SSH三大框架知识总结 Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架.其全新的Struts 2的体系结构与S ...
- 你所不知道的setInterval
在你所不知道的setTimeout记载了下setTimeout相关,此篇则整理了下setInterval:作为拥有广泛应用场景(定时器,轮播图,动画效果,自动滚动等等),而又充满各种不确定性的这set ...
- 【转】string.Format对C#字符串格式化
转自:http://blog.csdn.net/samsone/article/details/7556781 1.格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元) str ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
系列目录 前言:这是对本文系统一次重要的革新,很久就想要重构数据访问层了,数据访问层重复代码太多.主要集中增删该查每个模块都有,所以本次是为封装相同接口方法 如果你想了解怎么重构普通的接口DAL层请查 ...
- C#字符串的倒序输出
介绍 在本文中,我将演示如何将字符串的单词倒序输出.在这里我不是要将“John” 这样的字符串倒序为成“nhoJ”,.这是不一样的,因为它完全倒序了整个字符串.而以下代码将教你如何将“你 好 我是 缇 ...
- 前端精选文摘:BFC 神奇背后的原理
BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...
- Dozer扫盲级教程
前言 这篇文章是本人在阅读Dozer官方文档(5.5.1版本,官网已经一年多没更新了)的过程中,整理下来我认为比较基础的应用场景. 本文中提到的例子应该能覆盖JavaBean映射的大部分场景,希望对你 ...
- react入门(3)
在第一篇文章里我们介绍了jsx.组件.css写法 点击查看react入门(1) 第二篇文章里我们介绍了事件.this.props.children.props....other.map循环 点击查 ...
- Entity Framework 教程——创建实体数据模型
创建实体数据模型: 本文将带你创建实体数据模型(EDM)SchoolDB数据库和理解基础建设模块. 实体数据模型(EDM)是用于描述实体之间关系的一种模型,以下将使用Visual Studio 201 ...