我们的 SQL Server (2008) 实例配置为发送邮件并且一切正常,但我不知道如何查看现有配置,尤其是 SMTP 服务器。
从 SSMS 我只能启动配置向导,我在网上找不到任何东西 - 关于如何设置它的大量信息,但没有关于如何查看当前设置的信息。
如何查看现有设置?
我在 SQL Server 2016 上玩得很开心……我的数据库邮件没有发送,而且我已经没有地方可以查看了。我仔细检查了 DBmail 可执行文件的 SQL 帐户权限 - 它已读取并执行。我输入了防火墙出站端口 587 的规则。我尝试了另一个邮件帐户和配置文件,但遇到了相同的未发送问题。日志(db 邮件日志)中唯一的条目是服务的开始和结束。我能找到的任何地方都没有错误。电子邮件似乎只是进入发送队列,永远不会离开它。这些帐户可以自己发送和接收电子邮件,也可以从另一台计算机上的 SQL Server 2014 实例发送和接收电子邮件。
我有一个发送状态为“未发送”的项目队列,除了一长串未发送的邮件外,我还检查了所有正常位置和预期结果:
SELECT * FROM msdb..sysmail_event_log order by log_id DESC
SELECT * FROM dbo.sysmail_mailitems
SELECT * FROM dbo.sysmail_sentitems
USE msdb
SELECT sent_status, *
FROM sysmail_allitems
SELECT is_broker_enabled FROM sys.databases WHERE name = 'msdb';
EXECUTE msdb.dbo.sysmail_help_status_sp
Run Code Online (Sandbox Code Playgroud)
我曾尝试将其关闭并再次打开......所以我是否错过了可以阐明这种情况的 DMV 等?这是我搜索中没有的 SQL Server 2016 的已知问题吗?发送此邮件的任何其他可能步骤?
我的任务是为我的一位客户发送一份小型月度报告。该报告以前在实例上手动运行,输出复制到电子表格并作为附件发送给客户。
我正在寻找一个更永久的解决方案,所以我打算使用 sp_send_dbmail存储过程来运行查询并将其作为附件发送。
一切正常,但消息的格式。最初我尝试将输出附加为带有 a 的 CSV 文件,@query_result_seperator = ','但结果无处不在!
当我正常运行报告时,输出在 SQL 中看起来不错。但是将其作为 CSV 发送或仅在消息正文中发送则不然。
我认为如果我将输出导出为 HTML 并作为附件/或 XML 发送它可能会更好,但我不知道如何执行此操作。
有没有人有什么建议?
提前致谢!
我们有一个实例会随机尖峰 CPU。我想创建一个在 CPU 上触发超过 90% 的警报,并自动调用一个正在运行的作业sp_AskBrent并将输出通过电子邮件发送给我。但是,文本或 HTML 输出中的输出不可读。它甚至不适合 Excel 电子表格。如何以可读格式获取信息?
我有一个在托管服务帐户下运行的 SQL Server 2012 实例。我已经用一个帐户配置了数据库邮件,并试图发送一封测试电子邮件,但我在服务器的事件日志中收到了一些错误:
数据库引擎实例=MYINSTANCE;邮件PID=2132;错误消息:数据库更新失败。原因:对象“sysmail_logmailevent_sp”、数据库“msdb”、架构“dbo”上的 EXECUTE 权限被拒绝。
数据库引擎实例=MYINSTANCE;邮件PID=2212;异常类型:Microsoft.SqlServer.Management.SqlIMail.Server.Common.BaseException 消息:数据库读取失败。原因:对象“sp_readrequest”、数据库“msdb”、架构“dbo”上的 EXECUTE 权限被拒绝。数据:System.Collections.ListDictionaryInternal TargetSite:Microsoft.SqlServer.Management.SqlIMail.Server.Objects.QueueItem GetQueueItemFromCommand(System.Data.SqlClient.SqlCommand) HelpLink:NULL 来源:DatabaseMailEngine
如果我将运行 SQL Server 进程的帐户设置为系统管理员,则此错误将消失,并且邮件发送成功。但是,我所做的所有研究都表明,赋予此帐户DatabaseMailUserRole在msdb数据库中的角色就足够了。我已经这样做了,但仍然收到相同的错误。
我查看了 BOL,但找不到任何东西。
我的要求是将自动电子邮件创建为(通过数据库邮件格式化的 HTML 电子邮件)基本要求已经完成,当作业被触发时,它将数据插入到表中,并且该信息已被安排作为电子邮件发送,但现在客户已经以这种格式请求了。
我已经完成的当前格式
PO Date:2014-11-26 PO ID:PO1 SAP Ref:0001106102 GRN:1067 DealerID:045 Dealer Name:ABC(Pvt)Ltd. 2 Status:New
Run Code Online (Sandbox Code Playgroud)
客户要求的格式为表格格式
PO Date |PO ID| SAP Ref| GRN|DealerID|Dealer Name|Status
Run Code Online (Sandbox Code Playgroud)
这是我用来将数据插入到 Email_Table(_ERROR_MAIL) 中的 SQL 查询,这需要根据要求进行觊觎
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'ImpCancelledGRN')
BEGIN
DROP PROCEDURE [dbo].[ImpCancelledGRN]
END
GO
CREATE PROCEDURE [dbo].[ImpCancelledGRN]
WITH ENCRYPTION
AS
SET NOCOUNT ON
BEGIN
BEGIN TRY
-- Begin transaction
BEGIN TRAN
INSERT INTO _ERROR_MAIL(Recipients, Subject, CreationDate, IsNew, LastModifiedBy, Body)
SELECT 'noreply-Email@Adress.com', 'SAP CANCELLED GRN', …Run Code Online (Sandbox Code Playgroud) 我正在尝试发送数据库邮件,但我收到EXECUTE permission denied on the object 'sp_send_dbmail' database 'msdb', schema 'dbo'.. 我正在运行的代码如下:
SELECT SUSER_NAME(), USER_NAME();
Create USER kyle_temp FOR LOGIN Foo
EXECUTE AS USER = 'kyle_temp';
SELECT SUSER_NAME(), USER_NAME();
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Mail Profile',
@recipients = 'test@test.com',
@subject = 'Test',
@body = 'Test'
REVERT;
DROP USER kyle_temp
Run Code Online (Sandbox Code Playgroud)
Foo Login 显示它映射到 msdb 中的 Foo 用户。当我查看 msdb 中的 foo 用户时,我看到它已检查“DatabaseMailUserRole”并在 dbo 上执行sp_send_dbmail。
我错过了什么?
我在 sql 代理上配置了几个邮件配置文件,如何选择这些配置文件中的哪些用于发送特定 sql 代理作业的通知?
我对这个问题困惑了将近 1 周。希望我们社区中有人遇到过同样的问题并且已经找到了解决方案。
所以这是我的问题:
根据我们公司的政策,我们希望数据库邮件能够在启用 TLS 1.2 和禁用 TLS 1.0 和 TLS 1.1 的情况下通过端口 25 发送电子邮件。
我们的邮件服务器是 Exchange Server 2010,我们的 SQL Server 2016(开发者和企业版)盒子有 Windows Server 2016 标准版的操作系统。
我们的 SQL Server 版本是:
select @@version
----------------------------------------
Microsoft SQL Server 2016 (SP1-CU7-GDR) (KB4057119) - 13.0.4466.4 (X64)
Dec 22 2017 11:25:00
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)
Run Code Online (Sandbox Code Playgroud)
我们有如下所示的 DB 邮件配置。
问题是每当我们打开 SSL
use msdb
exec dbo.sysmail_update_account_sp @account_id=2, @enable_ssl = 1;
Run Code Online (Sandbox Code Playgroud)
我们不能发送 db …
我想弄清楚 sp_send_dbmail 的最佳使用实践,但我在网上找不到任何答案。
我们的开发人员喜欢使用 sp_send_dbmail 从应用程序内部发送与应用程序相关的电子邮件。假设例如用户忘记了他们的密码,他们将通过执行 sp_send_dbmail 发送用户请求的密码重置电子邮件。这只是他们使用此存储过程发送的多种电子邮件类型之一。这是一个好习惯吗?对我来说,这感觉像是一个肮脏的解决方案,因为有许多 API 可以处理您的应用程序中的电子邮件发送,而作为 DBA,我不喜欢在生产服务器上启用这些选项。我只是别无选择。也许有足够的动机和证据证明这是不好的做法和/或由于各种原因有潜在危险,我可以动摇他们改变它。