除了sp_send_dbmail之外还可以发送其他任何电子邮件吗?

时间:2014-03-24 11:41:12

标签: sql-server tsql sql-server-2012 sp-send-dbmail

我正在使用SQL Server 2012。

我计划在登台服务器上启用电子邮件,以确保在上线之前所有内容都按计划执行。我希望所有发送的电子邮件都发送到我自己的电子邮件地址而不是真正的客户端,因此我已经在[sp_send_dbmail]中对to,cc和bcc字段进行了硬编码,以便它只能发送给我,无论传递的参数如何。

http://technet.microsoft.com/en-us/library/ms189635.aspx上的technet页面只提到了sp_send_dbmail,我知道xp_sendmail已不再可用,所以我只想确保在此服务器上启用电子邮件之前无法通过电子邮件发送给客户端。

所以在我启用电子邮件之前,是否有人知道任何其他可以发送我可能没有考虑过的电子邮件的SP或XP?

由于

2 个答案:

答案 0 :(得分:1)

现在已经解决了,对于其他寻求同一问题解决方案的人来说......

似乎发送电子邮件或参与SQL Server 2012中的电子邮件的所有内容都围绕[msdb]。[dbo]。[sp_send_dbmail](以前版本的SQL Server也有xp_sendmail)。

所以你可以编辑[msdb]。[dbo]。[sp_send_dbmail],在BEGIN语句之后插入以下内容:

 SET    @recipients = 'YOURDEVEMAIL@ADDRESSHERE.com'
 SET    @copy_recipients = NULL
 SET    @blind_copy_recipients = NULL
 SET    @subject = '(STAGING EMAIL) ' + ISNULL(@subject, '')

然后,您将劫持通过SQL发送的任何电子邮件收件人,并将电子邮件发送到您提供的地址,这意味着没有任何内容发送给客户等。

您还需要考虑CLR和xp_cmdshell。

对于不熟悉这些的人来说,CLR是用其他编程语言编写的编译程序集,可以从SQL调用和执行,xp_cmdshell从SQL中运行命令shell。

通过在资源管理器窗格中打开相关数据库,可以在SSMS中找到CLR,转到可编程​​性>程序集和任何现有的程序集都在那里,但是这些已经被编译,这只是让你看看是否存在。您需要在其他地方找到这些源代码,与开发它们的人交谈,他们应该将它保存在某处(希望如此)。

xp_cmdshell可以执行您可以在Windows命令shell中执行的任何操作,因此它可能正在调用可能正在启动电子邮件的其他程序或批处理文件。你需要自己搜索任何调用xp_cmdshell的东西,RedGate SQL Search很适合帮助你。

答案 1 :(得分:0)

所以这些是我能想到的两个选择:

1)在您自己的存储过程中包装sp_send_dbmail并检查它是否是测试服务器,然后用测试帐户替换TO,CC和BCC。

2。)您可能不应该在测试服务器上有实时数据,因此只需使用测试电子邮件帐户设置测试数据。