SQL Server 2014 Database Mail重复发送邮件特殊案例

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
简介: 原文:SQL Server 2014 Database Mail重复发送邮件特殊案例在一数据库服务器(Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.
原文: 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的缘故,测试了一下,在收件人列表输入一个错误邮箱,确实会收到两封邮件。这个问题解决了!

 

image

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
5天前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
13天前
|
SQL DataWorks NoSQL
DataWorks产品使用合集之如何将SQL Server中的数据转存到MongoDB
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
241 1
|
18天前
|
SQL 关系型数据库 MySQL
怎么通过第三方库实现标准库`database/sql`的驱动注入?
在Go语言中,数据库驱动通过注入`database/sql`标准库实现,允许统一接口操作不同数据库。本文聚焦于`github.com/go-sql-driver/mysql`如何实现MySQL驱动。`database/sql`提供通用接口和驱动注册机制,全局变量管理驱动注册,`Register`函数负责添加驱动,而MySQL驱动在`init`函数中注册自身。通过这个机制,开发者能以一致的方式处理多种数据库。
|
20天前
|
SQL 监控 关系型数据库
实际应用中监控和诊断SQL语句执行情况的具体案例
实际应用中监控和诊断SQL语句执行情况的具体案例
|
6天前
|
SQL 存储 关系型数据库
关系型数据库中的SQL Server
【6月更文挑战第11天】
43 3
|
5天前
|
SQL IDE Java
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
6天前
|
SQL 弹性计算 API
云服务器 ECS产品使用问题之如何通过API调用阿里云服务器上SQL Server数据库中的数据
云服务器ECS(Elastic Compute Service)是各大云服务商阿里云提供的一种基础云计算服务,它允许用户租用云端计算资源来部署和运行各种应用程序。以下是一个关于如何使用ECS产品的综合指南。
|
10天前
|
SQL 数据库
SQL CREATE DATABASE 语句
SQL CREATE DATABASE 语句
30 4
|
16天前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
MySQL数据库——索引(3)-索引语法(创建索引、查看索引、删除索引、案例演示),SQL性能分析(SQL执行频率,慢查询日志)
18 2