在一数据库服务器(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重复发送邮件特殊案例的更多相关文章

  1. SQL server 表数据改变触发发送邮件

    今天遇到一个问题,原有生产系统正在健康运行,现需要监控一张数据表,当增加数据的时候,给管理员发送邮件. 领到这个需求后,有同事提供方案:写触发器触发外部应用程序.这是个大胆的想法啊,从来没写过这样的触 ...

  2. 看完SQL Server 2014 Q/A答疑集锦:想不升级都难!

    看完SQL Server 2014 Q/A答疑集锦:想不升级都难! 转载自:http://mp.weixin.qq.com/s/5rZCgnMKmJqeC7hbe4CZ_g 本期嘉宾为微软技术中心技术 ...

  3. SQL Server 2014新特性——基数评估(白皮书阅读笔记)

    基数评估 目录 基数评估 说明 基数评估准确的重要性 模型假设 启用新的基数评估 验证基数评估的版本 在迁移到新的基数评估前要测试 校验基数评估 偏差问题 需要手动处理的变化 避免因为新的CE造成性能 ...

  4. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  5. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

  6. SQL Server 2014新特性:其他

    AlwaysOn 增强功能 SQL Server 2014 包含针对 AlwaysOn 故障转移群集实例和 AlwaysOn 可用性组的以下增强功能: “添加 Azure 副本向导”简化了用于 Alw ...

  7. SQL Server 执行计划利用统计信息对数据行的预估原理以及SQL Server 2014中预估策略的改变

    前提  本文仅讨论SQL Server查询时, 对于非复合统计信息,也即每个字段的统计信息只包含当前列的数据分布的情况下, 在用多个字段进行组合查询的时候,如何根据统计信息去预估行数的. 利用不同字段 ...

  8. SQL Server 2014 Backup Encryption

    转载自: Microsoft MVP Award Program Blog 来源:Microsoft MVP Award Program Blog 的博客:https://blogs.msdn.mic ...

  9. SQL Server 2014新特性-原生备份加密

    注:本篇文章是IT68找我的约稿,原文地址:http://tech.it168.com/a2014/0610/1633/000001633147.shtml       SQL Server 2014 ...

随机推荐

  1. Leetcode 笔记 110 - Balanced Binary Tree

    题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...

  2. 向Java技术进军

    前两天有个朋友要我帮忙写个打印机服务,要求能应用在.net .Dephi.和java程序上面.看了下需求不难也就串口操作,所以就在周未写了个Win32的动态库,对于一个曾经写MFC程序的.net程序员 ...

  3. Android中自定义样式与View的构造函数中的第三个参数defStyle的意义

    零.序 一.自定义Style 二.在XML中为属性声明属性值 1. 在layout中定义属性 2. 设置Style 3. 通过Theme指定 三.在运行时获取属性值 1. View的第三个构造函数的第 ...

  4. 高薪诚聘熟悉ABP框架的.NET高级开发工程师(2016年7月28日重发)

    招聘单位是ABP架构设计交流群(134710707)群主阳铭所在的公司-上海运图贸易有限公司 招聘岗位:.NET高级开发工程师工作地点:上海-普陀区 [公司情况]上海运图贸易有限公司,是由易迅网的创始 ...

  5. 反编译.NET工程

    工具:       1.  .Net Reflector       2.   远程桌面 步骤: 1. 远程桌面连接到服务器 IP,port,user,pwd 2. 打开 IIS 这里面就是所部属的网 ...

  6. GitHub实战系列~4.把github里面的库克隆到指定目录+日常使用 2015-12-11

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...

  7. 【.NET深呼吸】基础:自定义类型转换

    照例,老周在开始吹牛之前,先讲讲小故事,这是朋友提出的建议,老TMD写技术有什么了不起的,人人都会写.后来老周想想,也确实,代码谁不会写,能写到有品位有感悟,就不容易做到.于是,老周接受了该朋友的建议 ...

  8. Notes:SVG(4)基于stroke-dasharray和stroke-dashoffset圆形进度条

    stroke-dasharray:定义描边的虚线长度,如果提供奇数个,则会自动复制该值成偶数 stroke-dashoffset:定义虚线描边的偏移量(在路径开始的前面,看不到) 实现如下所示 svg ...

  9. c 线程(平行世界)

    我们已经知道如何使用进程来做一些事情了,然而 它并不是在什么地方都是最适合的. 我们看看进程的缺点是什么: 线程隆重登场 1. 如何创建线程 创建线程可以使用多种线程库,在此我们使用最流行的一种:PO ...

  10. J2EE 邮件发送那些事儿

    距离自己写的关于java邮件发送的第一篇博客已经有很长一段时间了,现在回过头看看.虽然代码质量方面有待提高,整体结构也不怎样,但是基本思路和过程还是比较纯的.现在有空写写J2EE中邮件发送的开发,实际 ...