1

我正在使用 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 可以发送我可能没有考虑过的电子邮件?

谢谢

4

2 回答 2

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,转到 Programmability > Assemblies,并且任何现有的程序集都在那里,但是这些已经编译,这只是让您查看是否存在。您需要在其他地方找到这些源代码,与开发它们的人交谈,他们应该将其保存在某个地方(希望如此)。

xp_cmdshell 可以执行您可以在 Windows 命令 shell 中执行的任何操作,因此它可能会调用其他程序或批处理文件,这些程序或批处理文件可能会启动电子邮件。您需要自己搜索调用 xp_cmdshell 的任何内容,RedGate SQL Search 可以很好地帮助您解决这个问题。

于 2014-03-25T10:44:46.620 回答
0

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

1)将sp_send_dbmail包裹在自己的存储过程中,检查是否为测试服务器,然后将TO、CC、BCC替换为测试账号。

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

于 2014-03-24T15:54:56.780 回答