我正在使用SQL Server的sp_send_dbmail
存储过程通过数据库发送邮件。
但是当我执行该程序时,它正在关闭db邮件程序。我试图通过sysmail_start_sp
再次启动它。但是它会在7-8秒内再次关闭。
我尝试使用以下代码:
EXEC msdb..sp_send_dbmail @profile_name = 'Test',
@recipients = 'abc@gmail.com',
@subject = 'test mail',
@body_format = 'HTML',
@body = 'test mail',
@from_address = 'xyz@yahoo.com'
当我尝试检查错误日志时,我发现了以下错误:
消息:
数据库上的读取失败。原因:错误描述是 '此位置不允许有空格。'。数据: System.Collections.ListDictionaryInternalTargetSite: Microsoft.SqlServer.Management.SqlIMail.Server.Objects.QueueItem GetQueueItemFromCommand(System.Data.SqlClient.SqlCommand)HELPLINK: NULLSource:DatabaseMailEngineStackTrace 信息===================
当我检查sql电子邮件日志历史记录时,我发现了这个错误:
邮件没有排队。数据库邮件已停止。使用sysmail_start_sp启动数据库 邮件。
答案 0 :(得分:3)
每当您尝试从数据库邮件发送测试邮件时;它抛出以下错误信息:
消息14641,级别16,状态1,过程sp_send_dbmail,Mail not 排队。数据库邮件已停止。使用sysmail_start_sp启动 数据库邮件。
首先确保通过在SSMS中执行以下命令来启用数据库中的Service Broker消息传递:
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb'
如果上述查询的结果为0,则激活服务代理。
激活Service Broker允许将消息传递到数据库。必须创建Service Broker端点才能从实例外部发送和接收消息。
要在数据库中激活Service Broker,请使用以下命令:
USE master ;
GO
ALTER DATABASE DatabaseName SET ENABLE_BROKER ;
GO
如果启用了Service Broker,则通过在SQL Server Management Studio中执行以下查询来确认是否启用了数据库邮件:
sp_configure 'show advanced', 1
GO
RECONFIGURE
GO
sp_configure
GO
如果结果集将run_value显示为1,则启用数据库邮件。
如果禁用了“数据库邮件”选项,请运行以下查询以启用它:
sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE;
GO
sp_configure 'show advanced', 0;
GO
RECONFIGURE;
GO
启用数据库邮件后,启动数据库邮件外部程序在msdb数据库上使用下面提到的查询:
USE msdb ;
EXEC msdb.dbo.sysmail_start_sp;
要确认已启动数据库邮件外部程序,请运行下面提到的查询:
EXEC msdb.dbo.sysmail_help_status_sp;
如果启动了数据库邮件外部程序,请使用以下语句检查邮件队列的状态:
EXEC msdb.dbo.sysmail_help_queue_sp @queue_type = 'mail';
答案 1 :(得分:0)
要解决的问题很少,首先检查以确保通过执行以下操作来启用数据库邮件
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb'
如果上述结果为0
,请按照this guide
如果上面的结果是1
,那么检查数据库邮件的状态,执行以下语句:
EXECUTE dbo.sysmail_help_status_sp
要在邮件主机数据库中启动数据库邮件,请在msdb数据库中运行以下命令:
EXECUTE dbo.sysmail_start_sp